Java Android上的位图锁位?
我在Android上的程序使用的算法使用了大量的setPixel和getPixel,因此速度非常慢。在.NET上,我可以使用锁位来加快速度。Java或Android上是否有锁位或类似功能Java Android上的位图锁位?,java,android,image-processing,bitmap,lockbits,Java,Android,Image Processing,Bitmap,Lockbits,我在Android上的程序使用的算法使用了大量的setPixel和getPixel,因此速度非常慢。在.NET上,我可以使用锁位来加快速度。Java或Android上是否有锁位或类似功能 编辑:经过一些搜索,我找到了copyPixelToBuffer和copyPixelFromBuffer,想知道这是否是我需要的吗?是的,您应该使用上述两种方法,并使用ByteBuffer对象,首先存储所有位图数据。完成此操作后,将所有缓冲区数据复制到字节数组中,然后可以在此数组中执行所有argb操作。完成所有操
编辑:经过一些搜索,我找到了
copyPixelToBuffer
和copyPixelFromBuffer
,想知道这是否是我需要的吗?是的,您应该使用上述两种方法,并使用ByteBuffer对象,首先存储所有位图数据。完成此操作后,将所有缓冲区数据复制到字节数组中,然后可以在此数组中执行所有argb操作。完成所有操作后,将该字节数组包装到新分配的ByteBuffer中,然后最终将像素从该缓冲区复制回原始位图。
以下是一些示例:
“bmpData”是保存图像像素数据的位图对象
int size = bmpData.getRowBytes()*bmpData.getHeight()*4;
ByteBuffer buf = ByteBuffer.allocate(size);
bmpData.copyPixelsToBuffer(buf);
byte[] byt = buf.array();
for(int ctr=0;ctr<size;ctr+=4)
{
//access array in form of argb. for ex. byt[0] is 'r', byt[1] is 'g' and so on..
}
ByteBuffer retBuf = ByteBuffer.wrap(byt);
bmpData.copyPixelsFromBuffer(retBuf);
int size=bmpData.getRowBytes()*bmpData.getHeight()*4;
ByteBuffer buf=ByteBuffer.allocate(大小);
bmpData.copyPixelsToBuffer(buf);
字节[]byt=buf.array();
对于(int-ctr=0;ctr当我也在想同样的事情时,你有没有找到解决问题的方法?@TomP89是的,它比.NET LockBits简单得多,只需使用我在问题中提到的两种方法,它会将位图颜色数据复制到数组,反之亦然。