System.Drawing(GDI +)vs System.Windows.Media(WPF)vs Direct2D + DirectWrite + WIC

Fit*_*Dev 5 .net wpf graphics gdi+ direct2d

对于处理图像并将用C#编写的桌面Vista +应用程序,您会推荐以下哪种技术(或者您推荐的组合:System.Drawing(GDI +)vs System.Windows.Media vs Direct2D + DirectWrite + WIC.图像处理将涉及各种原始绘图,填充,处理文本,旋转,翻译,缩放,使用指针直接处理像素数据.一般来说,上述技术在操作位图方面有多好?

此外,如果有人知道一个好的和详细的比较图表,列出了并排的不同功能和等价物,以及不支持的,这将是伟大的!例如,WPF和Direct2D中是否存在ColorMatrix等价物?例如,在研究了SharpDX对Direct2D的实现后,我留下的印象是即使微软将其定位为GDI +的完全替代品,我也无法在Direct2D中找到所有GDI +的功能.

另外,考虑到它是2014年,你会说至少对于图像处理(如果不是UI的一部分,WPF似乎是一个更好的选择),GDI +在接下来的5年左右会好吗?或者我应该真的考虑使用所有3种技术,哪种方法效果最好?

谢谢.

hel*_*ker 1

我目前在一个视觉密集型 C#/WPF 项目中工作,并使用 Python 进行了一些图像处理方面的业余黑客工作。

根据您的预期用途,我将使用以下方法:

  • 尽可能使用WPF命名空间,即System.Windows.Media. 据我所知,System.DrawingGDI+ 通常使用非托管资源,这可能会产生不需要的、可以避免的问题;
  • 尽可能严格地使用 MVVM 架构。也就是说,您有一个仅用于显示信息的视图层,以及包含业务逻辑的模型层和视图模型层。尽管有些人可能会说视觉内容不属于 ViewModel 层,但如果您的应用程序处理图像操作,那么您的业务逻辑根据定义就是与视图相关的(我花了很长时间才弄清楚这一点)。
  • 如有疑问,请使用多维数组(在模型/视图模型中)执行图像处理并将这些数组绑定到视图(通过使用 ValueConverter 的数据绑定)。

这样,例如,您可以有一个ImageLayerViewModel类来表示一个 Layer,其Data属性(或ValuePixelArrayRaster等等)是double[height,width,depth].

我可以详细说明一下,但我不确定是否能正确回答您的问题,所以如果您愿意,请写下任何评论。