Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上的位图锁位?_Java_Android_Image Processing_Bitmap_Lockbits - Fatal编程技术网

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操作。完成所有操

我在Android上的程序使用的算法使用了大量的setPixel和getPixel,因此速度非常慢。在.NET上,我可以使用锁位来加快速度。Java或Android上是否有锁位或类似功能


编辑:经过一些搜索,我找到了
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简单得多,只需使用我在问题中提到的两种方法,它会将位图颜色数据复制到数组,反之亦然。