2014-07-13 55 views
5

對於處理圖像且要用C#編寫的桌面Vista +應用程序,以下哪些技術(或combination_會您推薦:System.Drawing(GDI +)vs System.Windows.Media與Direct2D + DirectWrite + WIC。圖像處理將涉及各種原始繪圖,填充,處理文本,旋轉,平移,縮放,直接使用像素數據指針一般來說,上述技術對於位圖的操作有多好?System.Drawing(GDI +)與System.Windows.Media(WPF)相對於Direct2D + DirectWrite + WIC

另外,如果有人知道一個好的詳細的比較圖表,列出並排不同的功能和等價物,以及不支持的東西,那太棒了!例如,WP中是否有ColorMatrix等價物F和Direct2D?例如,在調查了SharpDX對Direct2D的實施後,我留下了一個印象,即使微軟將其定位爲GDI +的完全替代品,但我無法在Direct2D中找到所有GDI +的功能。另外,考慮到它是2014年,你會說至少對於圖像處理(如果不是UI的一部分,WPF似乎是一個更好的選擇),GDI +對於未來5年左右可能會好起來年份?或者我真的應該考慮使用全部3種技術,哪種技術效果最好?

謝謝。

+0

Direct2D中缺少GDI +中的哪些功能? –

+0

GDI +不是圖像處理,它只是一個Win32 GDI的包裝,它主要支持渲染UI(而不是圖像)。所以功能相當有限。我認爲你應該搜索一些圖像Library for .NET,通過這樣的庫你可以做任何你喜歡的操作(在圖像上),比如執行一些複雜的變換,...​​ WPF中的圖形比Winforms好得多它也是面向UI的,而不是專注於Image。 –

+0

@WaltRitscher例如:HatchBrush,ColorMatrix,PathGradientBrush等等。 –

回答

1

我目前工作在一個視覺密集型的C#/ WPF項目中,並且已經在Python中使用圖像處理進行了一些嗜好黑客攻擊。

隨着你的使用目的,我會用下面的辦法:

  • 使用WPF命名空間儘可能的,那就是,System.Windows.Media。據我所知,System.Drawing和GDI +通常使用非託管資源,這可能會產生不希望的,可避免的問題;
  • 儘可能嚴格地使用MVVM架構。也就是說,您有一個View層僅用於顯示信息,而Model和ViewModel層包含業務邏輯。雖然有些人可能會說視覺材料不屬於ViewModel層,但如果您的應用程序處理圖像操作,那麼您的業務邏輯視圖定義(我花了很長時間才弄清楚了這一點)。
  • 如果有疑問,請使用多維數組(在Model/ViewModel中)執行圖像處理,並將這些數組綁定到View(通過使用ValueConverter的DataBinding)。

這樣一來,例如,你可以有一個ImageLayerViewModel類來表示一個圖層,用Data屬性(或ValuePixelArrayRaster,不管)爲double[height,width,depth]

我可以詳述一些,但我不確定是否在正確的軌道上回答你的問題,所以如果你想寫任何評論。

+0

謝謝發佈!但是我更關心圖像處理方面而不是UI。對於UI,我可能會從WinForms轉換到WPF。但是這並不會真正影響圖像處理部分,因爲理想情況下應該與UI無關並且甚至可以在服務的上下文中運行(GDI +和WPF都不能)。 –

+0

那麼,我的建議甚至更多的是不使用'System.Windows.Media [.Imaging]'命名空間來表示圖像和圖像內容。你可以讓你的ViewModel屬性爲任何類型,對你來說更方便(我發現雙精度數組是數字編輯的最佳選擇),並且只使用所述命名空間來通過數據綁定和值轉換器直觀地呈現圖像。如果您有足夠的知識,則可以自己實現圖像處理算法,而不是依賴於.Net成像命名空間提供的經常有限的方法。希望這可以幫助! – heltonbiker