Как загрузить буфер RGB565 в ImageView

У меня есть файл "Image_RGB565.raw", который содержит буфер изображения в формате RGB565. Я хочу, чтобы это изображение отображалось в ImageView. возможно ли без дополнительного кода преобразовать в RGB888?

я пытался

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeFile("Image_001_RGB565.raw");

но растровое изображение равно нулю.

затем я также попытался загрузить с помощью bytearray

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeFile(decodeByteArray(data, 0, data.length, opt);

Пожалуйста, направьте меня в правильном направлении. Размер моего изображения 160x160.


person JRC    schedule 18.10.2010    source источник


Ответы (2)


Прежде всего вам следует избегать хранения и передачи необработанных изображений на телефон; всегда лучше конвертировать их в сжатый формат, такой как PNG или JPG, на вашем ПК, и размещать эти изображения на устройстве.

Однако, если по какой-то необычной причине вы действительно хотите загрузить необработанные изображения, вот подход:

1) создайте Bitmap.Config.RGB_565 растровое изображение, содержащее ваше изображение. Вы должны знать высоту и ширину необработанного изображения.

2) создать ByteBuffer достаточного размера, чтобы содержать все пиксели растрового изображения; каждая строка сканирования изображения занимает шаг в пикселях, что может превышать ширину изображения. Это дополнительное дополнение в каждой строке необходимо. (Иногда по счастливому стечению обстоятельств шаг совпадает с шириной - отступов нет; на это нельзя полагаться, всегда делайте свои смещения с учетом шага.)

С ByteBuffers важно понимать смещения чтения и записи. После записи в ByteBuffer вы flip это читать эти байты.

3) прочитайте необработанные пиксели из файла в свой ByteBuffer, по одной строке сканирования за раз, с соответствующим шагом между строками.

4) используйте Bitmap.copyPixelsFromBuffer().

5) отказаться от ByteBuffer

person Will    schedule 18.10.2010
comment
Здравствуйте, Уилл, я смог отобразить изображение в соответствии с вашим предложением. Большое спасибо. - person JRC; 18.10.2010
comment
@JRC рад помочь; отметьте ответ как принятый и дайте мне несколько баллов! - person Will; 18.10.2010
comment
Супер полезно. Спасибо за подробную информацию! - person Brent Writes Code; 01.06.2011

Я сделал это так, и это работает.

Растровое изображение = Bitmap.createBitmap(captureWidth, CaptureHeight, Bitmap.Config.RGB_565);

Буфер ByteBuffer = ByteBuffer.wrap (данные);

bitmap.copyPixelsFromBuffer(буфер);

person Out Of Office    schedule 13.05.2011