converting Java bitmap to byte array
Try something like this:
Bitmap bmp = intent.getExtras().get("data");ByteArrayOutputStream stream = new ByteArrayOutputStream();bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);byte[] byteArray = stream.toByteArray();bmp.recycle();
CompressFormat is too slow...
Try ByteBuffer.
※※※Bitmap to byte※※※
width = bitmap.getWidth();height = bitmap.getHeight();int size = bitmap.getRowBytes() * bitmap.getHeight();ByteBuffer byteBuffer = ByteBuffer.allocate(size);bitmap.copyPixelsToBuffer(byteBuffer);byteArray = byteBuffer.array();
※※※byte to bitmap※※※
Bitmap.Config configBmp = Bitmap.Config.valueOf(bitmap.getConfig().name());Bitmap bitmap_tmp = Bitmap.createBitmap(width, height, configBmp);ByteBuffer buffer = ByteBuffer.wrap(byteArray);bitmap_tmp.copyPixelsFromBuffer(buffer);
Here is bitmap extension .convertToByteArray
wrote in Kotlin.
/** * Convert bitmap to byte array using ByteBuffer. */fun Bitmap.convertToByteArray(): ByteArray { //minimum number of bytes that can be used to store this bitmap's pixels val size = this.byteCount //allocate new instances which will hold bitmap val buffer = ByteBuffer.allocate(size) val bytes = ByteArray(size) //copy the bitmap's pixels into the specified buffer this.copyPixelsToBuffer(buffer) //rewinds buffer (buffer position is set to zero and the mark is discarded) buffer.rewind() //transfer bytes from buffer into the given destination array buffer.get(bytes) //return bitmap's pixels return bytes}