Bitmap bmp = intent.getExtras().get("data");
int size = bmp.getRowBytes() * bmp.getHeight();
ByteBuffer b = ByteBuffer.allocate(size);
bmp.copyPixelsToBuffer(b);
byte[] bytes = new byte[size];
try {
b.get(bytes, 0, bytes.length);
} catch (BufferUnderflowException e) {
// always happens
}
// do something with byte[]
当我在调用 copyPixelsToBuffer
之后查看缓冲区时,字节都是0 ...从摄像机返回的位图是不可变的...但是不应该't matter since it'进行复制 .
这段代码有什么问题?
9 回答
这是位图扩展
.convertToByteArray
在Kotlin中写道 .你的字节数组太小了 . 每个像素占用4个字节,而不仅仅是1个,因此将您的大小* 4乘以使阵列足够大 .
你需要倒回缓冲区吗?
此外,如果位图的步幅(以字节为单位)大于以像素为单位的行长度*字节/像素,则可能会发生这种情况 . 使字节长度为b.remaining()而不是size .
Ted Hopp是正确的,来自API文档:
“...此方法返回后,缓冲区的当前位置会更新:位置会增加缓冲区中写入的元素数 . ”
和
“从当前位置读取字节到指定的字节数组,从指定的偏移量开始,并按读取的字节数增加位置 . ”
尝试这样的事情:
Try this to convert String-Bitmap or Bitmap-String
为了避免更大文件的
OutOfMemory
错误,我会通过将位图分成几个部分并合并它们的部分字节来解决任务 .使用以下函数将位图编码为byte [],反之亦然
CompressFormat太慢了......
试试ByteBuffer .
※※※字节※※※的位图
※※※字节到位图※※※