2010-10-18 9 views
7

Ich habe Datei "Image_RGB565.raw", die Bildpuffer im RGB565-Format enthält. Ich möchte, dass dieses Bild in ImageView angezeigt wird. Ist es möglich, ohne zusätzlichen Code in RGB888 umzuwandeln?Wie man RGB565 Puffer zu ImageView lädt

Ich habe versucht,

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

aber Bitmap ist null.

dann habe ich versucht, auch mich mit laden bytearray

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

Bitte leiten Richtung zu korrigieren. Meine Bildgröße ist 160x160.

Antwort

6

Zuerst von allen, sollten Sie vermeiden, rohe Bilder auf Ihrem Telefon zu speichern oder zu übertragen; Es ist immer besser, sie in ein komprimiertes Format wie PNG oder JPG auf Ihrem PC zu konvertieren und diese Grafik auf dem Gerät bereitzustellen.

Wenn jedoch aus irgendeinem Grund ungewöhnlich wirklich Sie Rohbilder laden möchten, hier ist ein Ansatz:

1) schaffen ein Bitmap.Config.RGB_565bitmap Ihr Bild enthalten. Sie müssen die Höhe und Breite Ihres Rohbildes kennen.

2) Erstellen Sie eine ByteBuffer, die ausreicht, um alle Pixel in der Bitmap zu enthalten; jeder Scanline des Bildes dauert Schritt Anzahl der Pixel, die mehr als die Bildbreite sein kann. Diese zusätzliche Polsterung in jeder Zeile ist notwendig. (Manchmal ist der Schritt gleichbedeutend mit der Breite - es gibt keine Auffüllung; dies ist nicht verlässlich, immer Ihre Offsets berücksichtigen Schritt.)

Mit ByteBuffers, ist es wichtig zu verstehen, das Lesen und Schreiben Offsets. Nachdem Sie in einen ByteBuffer geschrieben haben, lesen Sie diese Bytes flip.

3) Lesen Sie die Rohpixel aus der Datei in Ihre ByteBuffer, jeweils eine Scanlinie, mit dem entsprechenden Schrittabstand zwischen den Zeilen.

4) Bitmap.copyPixelsFromBuffer() verwenden.

5) verwerfen die ByteBuffer

+0

Hallo Will, ich konnte das Bild nach Ihrem Vorschlag anzeigen. Danke vielmals. – JRC

+0

@JRC glücklich zu helfen; kreuze die Antwort an und gib mir ein paar Punkte! – Will

+0

Super hilfreich. Danke für die ausführliche Information! –

2

ich so tat es, und es funktioniert.

Bitmap-Bitmap = Bitmap.createBitmap (CaptureWidth, CaptureHeight, Bitmap.Config.RGB_565);

ByteBuffer buffer = ByteBuffer.wrap (Daten);

bitmap.copyPixelsFromBuffer (Puffer);

+0

Thans OOO, ich werde es versuchen – JRC

Verwandte Themen