Android 将位图编码和解码为字节数组,无需压缩

Android 将位图编码和解码为字节数组,无需压缩,android,bitmap,base64,bytearray,Android,Bitmap,Base64,Bytearray,我尝试在不使用bitmap.compress的情况下对位图到字节数组进行编码和解码,但在解码数组时,BitmapFactory.decodeByteArray始终返回NULL 编码方法如下: public byte[] ToArray(Bitmap b) { int bytes = b.getByteCount(); ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer b.copyP

我尝试在不使用bitmap.compress的情况下对位图到字节数组进行编码和解码,但在解码数组时,BitmapFactory.decodeByteArray始终返回NULL

编码方法如下:

public byte[] ToArray(Bitmap b)
{
    int bytes = b.getByteCount();

    ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
    b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer

    // DECODE
    String imgString = Base64.encodeToString(buffer.array(), Base64.NO_WRAP);
    byte[] ret = Base64.decode(imgString, Base64.DEFAULT);
    imgString = null;

    return ret;
}

有什么帮助吗?

位图工厂解码压缩的jpeg。如果您想使用原始像素(就像您使用
b.copyPixelsToBuffer(buffer);
我建议您使用配套方法
Bitmap.copypixelsfromsbuffer(buffer)
来恢复位图(我想您需要为此分配新的可变位图)

p.S.未压缩的图像比压缩的图像消耗的内存多得多

尝试以下方法:

final int lnth=bitmap.getByteCount();
ByteBuffer dst= ByteBuffer.allocate(lnth);
bitmap.copyPixelsToBuffer( dst);
byte[] barray=dst.array();
走另一条路

Bitmap bitmap = new BitmapFactory().decodeByteArray(byte_array, 0/* starting index*/, byte_array.length/*no of byte to read*/)

为什么不使用质量为100%的压缩?我假设这里关注的是图像的质量?@Ali如果您有效地创建了位图并打算将其存储在数据库中,则再次压缩它将是多余的。这正是我所做的,并且我始终从BitmapFactory中为空。decodeByteArrayDownload源代码d逐步浏览,看看发生了什么。从提供的详细信息很难说问题出在哪里。可能是位图的问题。看看这篇文章,看看它是否有帮助。因为BitmapFactory需要压缩的图像数据,这将不起作用