在WPF

2016-11-29 63 views
-1

我的問題的目的低級別成像一些觀點: 我希望能得到一些觀點是不那麼容易被讀取微軟概述,類和方法的描述得到。希望那些比我更有經驗的人能指引我走向正確的方向。在WPF

背景我的問題: 我硬件工程師,開發硅器件處理CMOS圖像傳感器的輸出以創建最終的圖片。我通常原型和C或C測試我的算法++(是超級老同學,我知道)致力於硬件之前。在我最新的項目中,我決定改用c#和WPF。

我嘗試過的東西仍然停留在: 但是我發現c#和WPF不太友好。例如,我只能找到一類,讓我操縱在像素水平上,或從一個數組創建位圖 - 而且是一個二維陣列。二維數組是經典和非常直觀的成像工作 - 將微軟真的沒有任何預罐頭類從一個二維數組到一個位圖轉換???我一定要使用錯誤類(我System.Windows.Media.Imaging.BitmapSource下試過幾乎所有的東西)。

我哪裏出錯了?在此先感謝

回答

2

WPF不是圖像庫或用於圖像處理,它是一個UI平臺/框架。 BitmapSource旨在用於在WPF環境中顯示的光柵數據,而不是用於操縱位圖數據。

您有幾種選擇:

  • System.Drawing - 這是圍繞GDI一個.NET包裝。您可以使用bitmap.LockBitsunsafe C#byte*UInt32*指針來操作數據訪問原始位圖數據。
    • GDI支持2D繪圖操作的硬件加速,直到Windows Vista。 Windows 7增加了一些硬件加速功能,但大部分操作仍在軟件中執行。鑑於今天的CPU速度如此之快,這在實踐中應該不成問題。如果你真的需要現代硬件加速2D繪圖,你應該使用Direct2D。
    • 請注意,System.Drawing在.NET Core中不可用,因爲它與Windows的GDI密切相關。
  • AForge.NET - 是一個開源的圖像處理,計算機視覺和人工智能庫,但是它建立在最上層的System.Drawing
  • ImageProcessor - 實際上是兩個庫:第一個是System.Drawing的包裝,它提供常見的消費應用程序圖像處理任務,例如生成縮略圖 - 另一個是支持.NET Core的圖像處理庫,可實現所需的位圖操作本身:ImageSharp
+0

嗯,我應該更清楚。我不需要一個庫來進行圖像操作,那些算法就是我應該寫的算法,並且假設我正在設計硬件,那麼代碼將會完全不同,然後你會爲PC應用程序做什麼 - 所以工作作爲一個數組的圖像是我想保留的。 – Leop

+0

我想卸載的東西就像「向用戶顯示位圖」一樣,並要求用戶輸入傳遞給模擬傳感器的類的噪聲值。我覺得WPF非常適合那些東西。這是越來越陣列成爲一個位圖,並獲得一個位圖是一個數組(因爲我需要一個位圖,使顯示容易在WPF)這給我的麻煩。 – Leop

0

見我的Q &一個在這裏

Creating a BitmapImage WPF

[System.Runtime.InteropServices.DllImport("gdi32.dll")] 
public static extern bool DeleteObject(IntPtr hObject); 

IntPtr hBitmap = bitmap.GetHbitmap(); 
try 
{ 
    imageSource = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, 
                 IntPtr.Zero, 
                 Int32Rect.Empty, 
                 System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); 
} 
catch (Exception e) { } 
finally 
{ 
    DeleteObject(hBitmap); 
} 
+0

好吧,我現在要看看它。 – Leop

+0

爲什麼它的價值我使用這個代碼的完全相同的用例作爲你;顯示來自cmos傳感器的圖像:) –