将位图转换为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(); 

使用以下行和function:

 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所需的大小