Sto provando a caricare un array di byte contenente i dati di un file bitmap a 24 bit in un oggetto Bitmap in Android, ma ho problemi dal Bitmap supporta solo i formati a 32 e 16 bit. Ecco cosa mi è venuta al fine di convertire i dati a 24 bit in 32 bit:Caricare correttamente i dati bitmap a 24 bit in un oggetto bitmap a 32 bit
byte[] file = new byte[is.available()];
is.read(file);
is.close();
byte[] paddedFile = new byte[file.length + file.length/3]; //we will be adding 1 more byte (alpha value) for each RGB triplet
for (int i = 0; i < file.length/3; i++) {
paddedFile[i * 4] = file[i * 3];
paddedFile[i * 4 + 1] = file[i * 3 + 1];
paddedFile[i * 4 + 2] = file[i * 3 + 2];
paddedFile[i * 4 + 3] = -1; //manually added alpha channel
}
Bitmap screen = Bitmap.createBitmap(479, 616, Bitmap.Config.ARGB_8888); //exact dimensions of the 24-bit bitmap file
screen.copyPixelsFromBuffer(ByteBuffer.wrap(paddedFile));
iv.setImageBitmap(screen);
E 'sorta di/quasi funziona. Ecco la bitmap con cui sto lavorando:
ed ecco cosa si presenta dopo il codice di cui sopra:
Perché è distorto? Qualsiasi vantaggio su come risolvere questo problema è molto apprezzato.
mostrare l'immagine si prega di – CoderNeji
ho provate ad aggiungere il valore alfa per paddedFile [i * 4] prima ma ho preso dei colori strani. Infatti, ho provato i valori -1/0/1 per paddedFile [i * 4] e paddedFile [i * 4 + 3] individualmente, e la combinazione che ho postato nella mia domanda sembra la più ragionevole. – user1112789
Sembra che ogni linea di scansione (del file) sia riempita. Se il file è un BMP, viene riempito al limite di 4 byte (32 bit) più vicino. Prova a utilizzare uno dei metodi 'createBitmap' che accetta un parametro' stride'. – haraldK