Переключение сканера штрих-кода zxing в портретный режим

1

Я следую этой проблеме (http://code.google.com/p/zxing/issues/detail?id=178) и следую инструкциям комментария № 46, но не повезло с samsung galaxy s 2.

Я записал изображение, которое он получил после поворота в DecodeHandler.java, и случилось странное. Похоже, что изображение скорректировано, но оно похоже на зеленый фильтр над ним (пожалуйста, проверьте файл ниже).

Изображение 174551

Кто-нибудь испытал это или имел решение для этого?

byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++)
        rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width; // Here we are swapping, that the difference to #11
width = height;
height = tmp;
data = rotatedData;

PS: Код для записи в файл

  • этот код отлично работает, если я передаю байт [] перед выполнением вращения.
  • После поворота изображение переходит в зеленый цвет

Код

 public void writeFile(byte[] data, 
                    String fileName, 
                    int width, int height) 
                    throws IOException{
  FileOutputStream out = new FileOutputStream(fileName);          
  YuvImage im = new YuvImage(data, ImageFormat.NV21, width,
          height, null);
    Rect r = new Rect(0,0,width,height);        
    im.compressToJpeg(r, 100, out);

  out.write(data);
  out.close();
}
  • 0
    Твик прост, хотя нужно немного изменить несколько файлов. Здесь я поставил полное решение для этого вопроса: stackoverflow.com/questions/16252791/…
Теги:
barcode
zxing
portrait

1 ответ

1

Я предполагаю, что проблема в том, что вы обрабатываете входные данные, как если бы они были непланарными, но это так. "Вращение" всех таких данных недопустимо. Вы хотите смотреть только на плоскость "Y" и игнорировать последующие данные U и V. Вы можете вращать бит Y, как вы здесь делаете; это самолет.

  • 0
    Привет Шон, спасибо за твой ответ. Можете ли вы быть более точным? Я никогда не работал с изображениями, и только по вашему описанию я могу понять концепцию, но не таким образом, чтобы помочь мне. Спасибо
  • 0
    Читайте о формате YUV. Сначала ставятся все данные о яркости (яркости) - «Y». Остальные данные подобны двум меньшим отдельным версиям изображения, содержащим данные о цвете. Вы хотите игнорировать их, но ваш цикл смешивает их так, как будто это больше плоскости Y.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню