2010-11-10 29 views
2

(我上週在SO上做了三篇有關我正在開發的Java項目的帖子,我感到內疚,但是到底什麼是你的答案,真是令人驚歎。)使用字節訪問位圖內存信息

這裏的代碼在C#中的程序塊

Bitmap bitmap = ... 

int dstStride = bitmap.Stride; 

byte* bdst = (byte*)bitmap.Scan0; 

我想在Java中的等效算法。我開始認爲這是不可能的,基於other, similar questions

我實際上可以複製我的位圖的步幅信息,但當然,byte*幾乎不可能重現。什麼後來發生的情況是,有一個for循環操縱位圖圖像,一拉:

bdst[x * 3 + y * dstStride + 2] = (byte)(alpha * bsrc[dx * 3 + L * srcStride + 2]); 

(X & y是一個循環迭代器)

當然我不能簡單地做BDST一個字節因爲這沒有意義。 According to this totally awesome article,Scan0是「[在固定數據陣列的存儲器中的地址]」。

並且由上面的SO帖子判斷,這在Java中是不可能的。確認/拒絕?

+0

不知道爲什麼你不能把bdst當成一個字節數組?這正是它的原因。 C#位圖類是本地位圖對象的包裝,它明顯將內部圖像數據表示爲指向第一個內存位置的指針。 – VinayC 2010-11-10 05:39:38

回答

1

你不能在Java中獲得直接指向內存的指針。這顯然是設計。

但是,您可以使用PixelGrabber類從圖像中獲取像素數組。或者,如果您有BufferedImage,則可以直接使用Raster。這可能會幫助您在不直接訪問內存的情況下實現目標。