java - reales - libro de android studio en español pdf
Nuevo mapa de bits modificado en la copia usando el búfer (1)
Cuando estoy usando copyPixelsFromBuffer y copyPixelsToBuffer, el mapa de bits no se muestra como el mismo, he intentado a continuación el código:
Bitmap bm = BitmapFactory.decodeByteArray(a, 0, a.length);
int[] pixels = new int[bm.getWidth() * bm.getHeight()];
bm.getPixels(pixels, 0, bm.getWidth(), 0, 0,bm.getWidth(),bm.getHeight());
ByteBuffer buffer = ByteBuffer.allocate(bm.getRowBytes()*bm.getHeight());
bm.copyPixelsToBuffer(buffer);//I copy the pixels from Bitmap bm to the buffer
ByteBuffer buffer1 = ByteBuffer.wrap(buffer.array());
newbm = Bitmap.createBitmap(160, 160,Config.RGB_565);
newbm.copyPixelsFromBuffer(buffer1);//I read pixels from the Buffer and put the pixels to the Bitmap newbm.
imageview1.setImageBitmap(newbm);
imageview2.setImageBitmap(bm);
¿Por qué Bitmap bm y newbm no mostraron el mismo contenido?
En su código, está copiando los píxeles en un mapa de bits con formato RGB_565
, mientras que el mapa de bits original del que obtuvo los píxeles debe estar en un formato diferente.
El problema está claro en la documentación de copyPixelsFromBuffer()
:
Los datos en el búfer no se modifican de ninguna manera (a diferencia de
setPixels()
, que convierte de 32 bits no preconfigurados a cualquiera que sea el formato nativo del mapa de bits.
Por lo tanto, utilice el mismo formato de mapa de bits, o use setPixels()
o dibuje el mapa de bits original en el nuevo utilizando una llamada Canvas.drawBitmap()
.
También use bm.getWidth()
& bm.getHeight()
para especificar el tamaño del nuevo mapa de bits en lugar de hard-coding como 160
.