有沒有辦法使用c#指針訪問BitmapImage
對象的底層內存?帶指針的BitmapSource訪問
我知道有一個CopyPixels
方法,但它將pixels數組的副本複製到一個新數組(複製內存要求)。如果你打開一個大的圖像(2GB),它會分配很多無用的東西。如果你想進行某種細化,比如CCLA,它需要大量的內存。我只需要讀取像素數組。
像System.Drawing.Bitmap
那樣可以像直接尋址像素嗎?
我寫了一個System.Drawing.Bitmap
的快速位圖訪問,但由於我使用的是WPF,因此我需要BitmapSource
的相同功能。否則,我不得不復製圖像加載(我的舊方法的位圖和BitmapSource
以在WPF中顯示圖像)佔用大量的內存和時間。
謝謝 洛倫佐
CCLA代表連接組件標記算法[HERE](http://en.wikipedia.org/wiki/Connected-component_labeling)。爲了工作,它需要整個圖像分配。是的,我有一個剛剛寫在System.Drawing中的算法。當我加載2-4gb的圖像時,使用您建議的方法,它會創建位圖的COPY以呈現圖像(CreateBitmapSourceForHBitmap)。同樣,CCLA需要一個int數組來標記我需要的大約14〜15GB的RAM來完成這個工作。如果沒有圖像轉換,我只需要9gb的內存。 – LoxLox
如何使用WriteableBitmap.BackBuffer直接訪問圖像?你認爲這是一個好主意嗎?你認爲可寫位圖創建了原始位圖的副本嗎? – LoxLox
可寫位圖只能調用'CopyPixels'。如果你使這個唯一的副本存在,那麼我認爲訪問'WritableBitmap'的'BackBuffer'是一個好主意。在開窗後或者使用'WindowsFormsHost'後,我還會繼續通過'CreateBitmapSourceForHBitmap'使用GDI算法,但那只是我自己。 – Mitch