3

我在 Android 上的程序使用了一种算法,该算法使用了大量的 setPixel 和 getPixel,因此它非常慢。在 .NET 上,我可以使用 LockBits 使其更快。Java 或 Android 上是否有 LockBits 或类似的东西?

编辑:经过一些搜索,我找到了copyPixelToBufferand copyPixelFromBuffer,想知道它是否是我需要的?

4

1 回答 1

4

是的,您应该使用上述两种方法并使用 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);
于 2012-08-10T18:06:41.360 回答