将位图转换为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所需的大小