2012-01-02 53 views
2

我的Android程序使用的算法使用了很多setPixel和getPixel,因此它非常慢。在.NET上,我可以使用LockBits來加快速度。在Java或Android上有LockBits或類似的東西嗎?Android上的Bitmap LockBits?

編輯:經過一番搜索,我發現copyPixelToBuffercopyPixelFromBuffer,不知道它是我需要的嗎?

+0

你有沒有找到解決你的問題,因爲我也想知道同樣的事情? – TomP89 2012-07-10 21:02:19

+1

@ TomP89是的,它比.NET LockBits容易得多,只需使用我在問題中提到的2種方法,它會將位圖顏色數據複製到數組中,反之亦然。 – 2012-07-11 12:18:56

+0

非常感謝! – TomP89 2012-07-11 13:06:20

回答

3

是的,您應該使用上述兩種方法並利用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);