Androidの私のプログラムは、多くのsetPixelとgetPixelを使用するアルゴリズムを使用しているため、非常に低速です。.NETでは、LockBitsを使用して高速化できます。JavaまたはAndroidにLockBitsなどはありますか?
編集:いくつかの検索の後、私はそれが私が必要としているものであるかどうかを見つけcopyPixelToBuffer
てcopyPixelFromBuffer
疑問に思いましたか?
Androidの私のプログラムは、多くのsetPixelとgetPixelを使用するアルゴリズムを使用しているため、非常に低速です。.NETでは、LockBitsを使用して高速化できます。JavaまたはAndroidにLockBitsなどはありますか?
編集:いくつかの検索の後、私はそれが私が必要としているものであるかどうかを見つけcopyPixelToBuffer
てcopyPixelFromBuffer
疑問に思いましたか?
はい、上記の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);