7

我的新应用程序将具有丰富的界面,它应该可以即时调整大小,使用透明图标/图像等。对于这个应用程序,我正在尝试决定使用新的Direct2D API 来对抗旧的 GDI。缺点之一当然是它不能在 XP 上运行,尽管我发现了一些更棘手的问题需要决定:

  1. 我注意到在 Direct2D 环境中输出文本似乎有点模糊(尽管作为一项功能销售)。只需查看启用了硬件加速(或 IE9)的 Firefox 4 中的文本。这似乎是因为 Direct2D 中的文本不像 GDI 那样遵循(像素)网格。有没有办法强制 Direct2D 使其坚持像素网格,从而解决这个问题?

  2. 速度真的有这么大的提升吗?我试图理解这篇文章,我从中得到的是,在 Windows 7 和 XP(不是 Vista?)中,GDI 已经在可能的地方进行了硬件加速。例如,在我的应用程序中,我使用了很多内存 DC,它们刚刚被BitBlt编入到位,并且正在使用AlphaBlend. 最后一个肯定是硬件加速的,因为我在测试例程时测量了速度。

那么你会把钱放在哪里呢?Direct2D 是否值得麻烦,还是您会坚持使用旧的 GDI?或者你会建议别的吗?

注意:顺便说一句,我正在用 C++ 编程,没有使用 MFC。

4

2 回答 2

6

解决您的问题非常简单。Direct2D 是高度可配置的,其中包括文本呈现和提示。如果你想让它渲染文本以​​匹配 GDI 的渲染(即非常紧密的像素对齐),只需:

由于另一个答案非常无用并抨击 Direct2D 中的呈现,让我提供 Direct2D 文本呈现的另一个概述。这是非常非常好的。不像在 Mac 上,它们基本上不提示字体并且文本实际上是模糊的,Direct2D 默认情况下仅在 Y 方向上强烈提示。这是有道理的,因为您的显示器在垂直方向上可能有大约 96 dpi,但使用亚像素抗锯齿,水平分辨率超出了人类合理感知的范围。它的 ClearType 使用和提示也比 GDI 更微妙。与 Direct2D 相比,GDI 文本的边缘往往色彩丰富。我发现现在 GDI 文本看起来非常刺眼,并且更喜欢 Firefox 和 IE 中的 Direct2D 文本用于长时间阅读会话。

因此,默认模式对您来说可能显得“模糊”有几个原因。

  1. 首先,花点时间在控制面板中运行 ClearType 调谐器程序。您会惊讶于 Direct2D 程序的不同。
  2. 不管它有多好,当你将它放在应用程序中的 GDI 间隔文本旁边时,它总是会显得很奇怪。尝试将 UI 中的所有内容都设置为一种或另一种,或将内容区域与其他区域明确区分开来。如果您决定让所有内容都以 GDI 间隔,只需使用我上面描述的方法将 Direct2D 设置为 GDI 间隔文本模式。
  3. 您尚未从 Windows 更新安装所有可用更新。DirectWrite 和 IE 有几个。确保全部安装并重新启动以查看改进。
  4. 你只是还没习惯而已。
  5. 它在你的脑海里。真的。一旦您开始大量考虑文本渲染,您可能会发现自己注意到不存在的“问题”。这个问题的另一个答案就是一个完美的例子。他说他认为 Visual Studio 2010 中的文本比 2008 更模糊,但它们实际上是像素完美的副本。不相信我?VS 开发人员实际上自己提供了一些比较。我敢打赌,你分不出区别。http://blogs.msdn.com/b/text/archive/2010/03/05/additional-wpf-text-clarity-improvements.aspx
于 2012-01-30T08:26:53.030 回答
1

正如许多软件依赖摩尔定律的必然发展来提供越来越多的功能一样,GDI+ 和 Direct2D 似乎基于屏幕分辨率(像素密度)将继续提高这一事实。但事实是像素密度并没有显着增加,并且在表面上已经达到了一个平台。

GDI 文本的设计假设分辨率很差。像素对齐、提示和后来的子像素渲染(例如 ClearType)都是精心设计的折衷方案,它们权衡了现实生活中每英寸 75-100 像素的可读性限制与缩放和旋转等任意变换的一般性。

如果我们的屏幕的像素密度更接近现代打印机可以产生的像素密度,我很乐意放弃这些妥协以支持通用性。但我们不在那里。我们甚至没有接近。就个人而言,正是由于这些原因,我发现 VS 2010 中的编辑器的可读性远低于 VS 2008 中的编辑器。

需要考虑的事项:您是否需要担心屏幕以外的设备?打印机?Direct2D 是否处理打印机,或者您是否必须实施 GDI 解决方案?Windows XP 有多重要?你想成为怎样的未来证明?Direct2D 显然是微软试图打动所有人的方向。

不考虑的事情:速度。无论技术如何,我还没有看到任何现代应用程序受到将文本呈现到屏幕的速度的限制。这是一条高度优化的路径。实际布局可能比在屏幕上设置像素值更具瓶颈。如果您正在制作全屏缩放的动画,那么您可能需要 Direct2D——不是为了速度,而是为了一般的变换和平滑缩放。

于 2011-09-21T16:53:24.780 回答