我在安卓上的程序使用的算法使用了大量的setPixel和getPixel,因此,它非常慢。在.NET上,我可以使用LockBits来加快速度。在Java或者Android上有没有LockBits或者类似的东西?
编辑:经过几次搜索,我找到了copyPixelToBuffer和copyPixelFromBuffer,不知道这是不是我需要的?
发布于 2012-08-11 02:06:41
是的,您应该使用上述两种方法,并使用一个ByteBuffer对象,在该对象中,您将首先存储所有的位图数据。这样做之后,将所有缓冲区数据复制到一个字节数组中,然后可以在该数组中执行所有argb操作。完成所有操作后,将这个字节数组包装到一个新分配的ByteBuffer中,最后将该缓冲区中的像素复制回原始位图中。下面是一些示例:"bmpData“是保存图像像素数据的Bitmap对象。
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);https://stackoverflow.com/questions/8698983
复制相似问题