2010-10-18 2 views
7

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

Я попытался

 
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.

ответ

6

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

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

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

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

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

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

4) использование Bitmap.copyPixelsFromBuffer().

5) отбрасывать ByteBuffer

+0

Привет, я смог отобразить изображение согласно вашему предложению. Большое спасибо. – JRC

+0

@ JRC рада помочь; отметьте ответ, как принято, и дайте мне несколько баллов! – Will

+0

Супер полезно. Спасибо за подробную информацию! –

2

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

Bitmap bitmap = Bitmap.createBitmap (captureWidth, captureHeight, Bitmap.Config.RGB_565);

ByteBuffer buffer = ByteBuffer.wrap (данные);

bitmap.copyPixelsFromBuffer (buffer);

+0

Thans OOO, я попробую – JRC

Смежные вопросы