Я получаю необработанные данные камеры rawData
типа byte[]
, формат RGBA, размер 640x480, 4 байта на пиксель, из библиотечной функции. И мне нужно преобразовать его в растровое изображение и отобразить в ImageView на экране.
Я делаю следующее:
byte[] JPEGData = convertToJpeg(rawData, 640, 480, 80);
Bitmap bitmap = BitmapFactory.decodeByteArray(JPEGData , 0, JPEGData .length);
imageView.setImageBitmap(bitmap);
где функция convertToJpeg()
:
public static byte[] convertToJpeg(byte[] buffer, int w, int h, int quality) {
YuvImage yuv_image = new YuvImage(buffer, ImageFormat.NV21, w, h, null);
Rect rect = new Rect(0, 0, w, h);
ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, quality, output_stream);
Bitmap sourceBmp = BitmapFactory.decodeByteArray(output_stream.toByteArray(), 0, output_stream.size());
Bitmap destBmp = Bitmap.createScaledBitmap(sourceBmp, (int) (w * 0.75), (int) (h * 0.75), true);
ByteArrayOutputStream pictureStream = new ByteArrayOutputStream();
destBmp.compress(CompressFormat.JPEG, quality, pictureStream);
byte[] pictureByteArray = pictureStream.toByteArray();
return pictureByteArray;
}
После decodeByteArray()
звонка у меня bitmap.getConfig() == ARGB_8888
.
Однако то, что я вижу на экране, представляет собой хаотичную картинку с размытыми зелеными формами того, что было на исходной картинке.
Что с этим не так?
(imageView.setBitmap(bitmap));
. Что я должен делать? - person Alexander Shmuratko   schedule 27.08.2014byte[] JPEGData = convertToJpeg(rawData, ...);
, гдеconvertToJpeg
указано выше. И 2)Bitmap bitmap = BitmapFactory.decodeByteArray(JPEGData , 0, JPEGData .length);
Должен ли я декодировать данные, как вы говорите, на шаге 1 или после шага 3? - person Alexander Shmuratko   schedule 27.08.2014byte[] buffer
следует преобразовать в формат ARGB. Я думаю, чтоcompressToJpeg
ожидает формат ARGB - person Simon Marquis   schedule 27.08.2014rawData
- этоRGBA
. - person Alexander Shmuratko   schedule 27.08.2014