我想對WPF應用程序中的圖像進行一些處理。但是,我想在運行時修改內存中的BitmapSource的像素。是否有可能從另一個線程不安全地修改內存中的WPF BitmapSource
我目前正在設法使用'不安全'的代碼來對付老式的System.Drawing.Bitmap,它可以處理(鎖定工作區域,擺弄像素)作業。該方法在這篇文章中描述:http://blogs.msdn.com/b/ericgu/archive/2007/06/20/lost-column-2-unsafe-image-processing.aspx
要獲得在WPF這個工作我那麼使用這種方法創建一個WPF的BitmapSource:
BitmapSource destination;
IntPtr hBitmap = bitmap.GetHbitmap();
BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
destination = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, sizeOptions);
destination.Freeze();
return destination;
然而,這在內存中創建和我有很多副本真的很想進入那裏,像BitGu例子中EricGu所示的那樣擺弄BitmapSource中的底層位。這可能嗎?
我意識到PixelShaders可以做到這一點,但這是一個涉及多個線程(當在不安全模式下編輯位圖時支持)的學術練習。
在此先感謝
我在另一臺機器上有一些很好的代碼。如果你幾個小時內沒有得到答覆,我會抓住它。我相信我使用了BitmapImage。它來自BitmapSource。我不確定,但我有一種感覺,你將永遠不得不將它轉換爲位圖。雖然有更多優雅的轉換方式。 – Harry 2010-10-13 12:51:46