Преобразование bitmap в byteArray android

У меня есть растровое изображение, которое я хочу отправить на сервер, закодировав его на base64, но я не хочу сжимать изображение в png или jpeg.

Теперь то, что я раньше делал, было.

ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream(); bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY, byteArrayBitmapStream); byte[] b = byteArrayBitmapStream.toByteArray(); //then simple encoding to base64 and off to server encodedImage = Base64.encodeToString(b, Base64.NO_WRAP); 

Теперь я просто не хочу использовать какое-либо сжатие или какой-либо формат простой простой байт [] из растрового изображения, который я могу кодировать и отправлять на сервер.

Любые указатели?

Вы можете использовать copyPixelsToBuffer() для перемещения данных пикселов в Buffer , или вы можете использовать getPixels() а затем преобразовать целые числа в байты с битовым сдвигом.

copyPixelsToBuffer() , вероятно, вы хотите использовать, так что вот пример того, как вы можете его использовать:

 //b is the Bitmap //calculate how many bytes our image consists of. int bytes = b.getByteCount(); //or we can calculate bytes this way. Use a different value than 4 if you don't use 32bit images. //int bytes = b.getWidth()*b.getHeight()*4; ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer byte[] array = buffer.array(); //Get the underlying array containing the data. 

Вместо следующей строки в ответе @jave:

 int bytes = b.getByteCount(); 

Используйте следующую строку и функцию:

 int bytes = byteSizeOf(b); protected int byteSizeOf(Bitmap data) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) { return data.getRowBytes() * data.getHeight(); } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return data.getByteCount(); } else { return data.getAllocationByteCount(); } 
 BitmapCompat.getAllocationByteCount(bitmap); 

Полезно найти требуемый размер ByteBuffer