Есть ли простой способ превратить массив байтов из onPreviewFrame камеры в изображение в Android? - PullRequest
6 голосов
/ 23 июля 2010

Я спрашиваю, есть ли простой способ, потому что в отчете о проблеме Google говорится, что использование decodeByteArray невозможно. Но этот отчет был составлен в 2008 году, и я надеялся, что там не найдется решение. Метод, указанный в отчете о проблеме, состоял в том, чтобы самостоятельно декодировать формат, но я бы предпочел не включать это и замедлять работу программы. Буду признателен за любую помощь.

Ответы [ 2 ]

8 голосов
/ 06 декабря 2010

Я предполагаю, что ваш байтовый массив взят из предварительного просмотра камеры?Если это так, вы должны декодировать его, но с 2.2 это довольно легко.

Создайте YUV-изображение из байтового массива, поскольку данные будут только в ImageFormat.NV21( int code 17)

img = new YuvImage(imgData, ImageFormat.NV21, width, height, null);

прямоугольник того же размера, что и изображение.

Создайте ByteArrayOutputStream и передайте его, прямоугольник и значение сжатия compressToJpeg().

Затем вы можете использовать

Bitmap mBitmap = BitmapFactory.decodeByteArray(outputStream.toByteArry(),0,outputStream.size());

Я использую это для каждого кадра в обратном вызове, и он отлично работает.Надеюсь, это поможет.

3 голосов
/ 23 июля 2010

Самый простой способ - создать BufferedImage следующим образом:

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0. data.length);

данные - это байтовый массив.

...