【问题标题】:Why WPF? (As 2D vector graphics API)为什么是 WPF? (作为 2D 矢量图形 API)
【发布时间】:2010-01-27 11:10:22
【问题描述】:

我有一个用于 2D 矢量图形的可视化模块。所有对绘图 API 的调用都在那里严格隔离。我希望能够通过重新实现模块来用另一个绘图 API 替换一个绘图 API。所有用于可视化的数据都通过一个名为 Ixxx 的接口传输到模块中。我可以在 GDI+(通过 WinForms)和 WPF 之间进行选择,那么为什么要选择最后一个呢?有什么原因吗?

分析了一些朋友切换到WPF的常见案例,发现主要原因有:

  1. WPF 更新/更酷/更现代/更有趣/blah-blah-blah。
  2. Ixxx 的设计不够抽象(例如,传输原始 XAML)或者它根本不存在(任何模块在任何时间以它想要的方式绘制任何东西)。当然,如果您没有自己的图形描述解决方案,最好使用 XAML,而不是什么都不使用并共享通用 HDC。

再次重申,我不会将我的灵魂“出卖”(有关详细信息,请参阅 AJ&TZ)给任何给定的 API,我只想暂时“出租”它。这意味着除了在同一个地方绘制所有数据之外,不使用任何 API。

问候, 塞尔吉。

【问题讨论】:

  • WPF 是基于矢量的,这很重要!你的帖子似乎有点偏颇。我们,普通的代码猴子只想把我们的孩子送到一所好的私立学校。出卖一个人的灵魂是为了 20 岁。
  • 如果 WinForms GDI+ 是您唯一的选择,那么这很简单:WPF 动手能力强。图形加速有人吗?
  • 你真的认为大多数人都知道 AJ&TZ 是什么意思吗?那本书永远不会像 GOF 那样出名。
  • 2nightcoder:我认为完全一样,它永远不会像GoF那样出名。不过,您可以利用这个机会了解它,或者直接绕过首字母缩略词(发挥您的想象力)。

标签: wpf


【解决方案1】:
  • WPF 专为矢量图形而设计。 GDI+ 用于光栅图形。
  • WPF 将使用您计算机的图形处理器。 GDI+ 将在 CPU 中完成所有工作。
  • WPF 有一个全新的 API,强调易用性。 GDI+ 是古老的(Windows 3.x 时代),专注于我们现在认为的极低功耗硬件的性能。
  • WPF 有一个我们大多数人都不理解的全新 API。每个人都知道如何使用 GDI+。
  • 学习 2D WPF,您就有了 3D WPF 的基础。在 GDI+ 之后,您需要使用 Direct3D 重新开始。

注意:我不是图形人,我写的是商业应用程序。这主要基于营销文献和少量测试程序。

【讨论】:

  • "GDI+ 将在 CPU 中完成所有工作。"这是真的吗?我曾经认为任何现代显卡(从古代 Matrox 开始)都会加速 GDI+。没有找到赞成或反对的人:看起来今天根本没有人对 GDI+ 加速感兴趣。无论如何,谢谢,我将阅读有关 WPF 加速的更多信息,尤其是与字形渲染相关的内容(绘图引擎的致命弱点!)。
  • “在 GDI+ 之后,您需要使用 Direct3D 重新开始”。我想这没关系,因为我对 D3DIM (8) 已经足够熟悉了。但如果我什至根本不是,那么问题是关于 [假设的] WPF 对项目成功的优势(基于 2D 模块质量),而不是程序员教育。
  • 据我所知(非常有限),GDI+ 根本没有考虑到现代视频卡。请记住,这些 API 可以追溯到 Windows 3.1 时代。
  • @noober 是的,这是真的,尽管它曾经是错误的。 Before Vista GDI+ was hardware-accelerated。根据您是否喜欢阴谋论,您可能会认为 Vista 扼杀了这一点,要么是因为将其移植到 DWM 的工作量太大,要么是因为他们希望更好地将 WPF 与 GDI 区分开来。
【解决方案2】:

WPF 图形是硬件加速的。我认为这是一个重要的考虑因素。它是一个非常灵活的 2D 图形 API,并且有一个很好的在线社区。

这个库值得你看看,看看 WPF 能做什么:http://dynamicdatadisplay.codeplex.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多