Неправильный формат класса Android YuvImage? - PullRequest
1 голос
/ 28 июня 2011

Хорошо задокументировано, что данные предварительного просмотра камеры Android возвращаются обратно в NV21 (YUV 420).2.2 добавлен класс YuvImage для декодирования данных.Проблема, с которой я столкнулся, заключается в том, что данные класса YuvImage выглядят поврежденными или неверными.Я использовал приложение Renderscript Sample под названием HelloCompute, которое превращает растровое изображение в одноцветное растровое изображение.Я использовал два метода для декодирования данных предварительного просмотра в растровое изображение и передачи их в качестве входных данных для Renderscript:

Метод 1 - Android YuvImage Class:

YuvImage preview = newYuvImage (data, ImageFormat.NV21, width, height, null);

ByteArrayOutputStream mJpegOutput = new ByteArrayOutputStream (data.length);

preview.compressToJpeg (новый Rect (0, 0, ширина, высота), 100, mJpegOutput);mBitmapIn = BitmapFactory.decodeByteArray (mJpegOutput.toByteArray (), 0, mJpegOutput.size ());

// передать mBitmapIn в RS

Метод 2 - метод объявленного декодера: Как опубликовано здесь Дэвидом Перлманом

// обходной путь для формата Yuv

mBitmapIn = Bitmap.createBitmap (ImageUtil.decodeYUV420SP (данные, ширина, высота), ширина,height, Bitmap.Config.ARGB_8888);

// передача mBitmapIn в RS

Когда изображение обрабатывается с помощью Renderscript и отображается метод 1 очень зернистый и не монохромный, в то время как Метод 2 дает ожидаемый вывод , монохромное изображение кадра предварительного просмотра.Я делаю что-то не так или класс YuvImage не используется?Я тестирую это на Xoom под управлением 3.1.

Кроме того, я отображал растровые изображения, созданные обоими методами, на экране перед передачей в RS.Растровое изображение из метода 1 имеет заметные различия в освещении (я подозревал, что это произошло из-за сжатия JPeg), в то время как растровое изображение метода 2 идентично кадру предварительного просмотра.

1 Ответ

1 голос
/ 10 октября 2011

Нет оправдания использованию кодирования / декодирования Jpeg только для преобразования изображения YUV в растровое изображение в градациях серого (я полагаю, вы хотите использовать оттенки серого, а не черно-белое черно-белое изображение) . Вы можете найти множество примеров кода, которые дают нужный вам результат. Вы можете использовать это: Преобразование кадра предварительного просмотра в растровое изображение .

...