2012-01-02 13 views
2

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

編集:いくつかの検索の後、copyPixelToBuffercopyPixelFromBufferが見つかりました。

+0

私も同じことが思っていたので、あなたの問題を解決したことはありますか? – TomP89

+1

@ TomP89はい、.NET LockBitsよりはるかに簡単です。私が質問した2つの方法を使用するだけで、ビットマップカラーデータが配列にコピーされます。逆もまた同様です。 –

+0

ありがとう! – TomP89

答えて

3

はい、上記の2つの方法を使用し、すべてのビットマップデータを最初に格納する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); 
関連する問題