Bitmap LockBits на Android? - PullRequest
       45

Bitmap LockBits на Android?

2 голосов
/ 02 января 2012

Моя программа на Android использует алгоритм, который использует множество setPixel и getPixel, поэтому он очень медленный. В .NET я могу использовать LockBits, чтобы сделать это быстрее. Есть ли LockBits или аналогичные на Java или Android?

РЕДАКТИРОВАТЬ: После некоторых поисков я нашел copyPixelToBuffer и copyPixelFromBuffer, интересно, это то, что мне нужно?

1 Ответ

3 голосов
/ 10 августа 2012

Да, вы должны использовать два вышеупомянутых метода и использовать объект 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);
...