studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones java android bitmap bitmapfactory

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 .