3

Androidの私のプログラムは、多くのsetPixelとgetPixelを使用するアルゴリズムを使用しているため、非常に低速です。.NETでは、LockBitsを使用して高速化できます。JavaまたはAndroidにLockBitsなどはありますか?

編集:いくつかの検索の後、私はそれが私が必要としているものであるかどうかを見つけcopyPixelToBuffercopyPixelFromBuffer疑問に思いましたか?

4

1 に答える 1

4

はい、上記の2つのメソッドを使用し、最初にすべてのビットマップデータを格納する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);
于 2012-08-10T18:06:41.360 に答える