C++ Direct2D界面和模糊文本问题

C++ Direct2D界面和模糊文本问题,c++,windows,gdi,direct2d,C++,Windows,Gdi,Direct2d,我的新应用程序将具有一个丰富的界面,它应该可以动态调整大小,使用透明的图标/图像等。对于这个应用程序,我正试图决定使用新的API来对抗旧的GDI。缺点之一当然是它不能在XP上运行,尽管我发现有一些更棘手的问题需要决定: 我注意到在Direct2D环境中输出文本似乎有点模糊(尽管作为一项功能进行了销售)。只需看看Firefox4中启用硬件加速(或IE9)的文本。这似乎是因为在Direct2D文本中像GDI一样。有没有办法强制Direct2D使其粘附在像素网格上,从而解决此问题 速度真的有这样的提高

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

  • 我注意到在Direct2D环境中输出文本似乎有点模糊(尽管作为一项功能进行了销售)。只需看看Firefox4中启用硬件加速(或IE9)的文本。这似乎是因为在Direct2D文本中像GDI一样。有没有办法强制Direct2D使其粘附在像素网格上,从而解决此问题

  • 速度真的有这样的提高吗?我试图理解这篇文章,我从中得出的结论是,在Windows7和XP(不是Vista?)中,GDI已经在尽可能的地方进行了硬件加速。例如,在我的应用程序中,我使用了大量的内存DC,它们只是
    BitBlt
    ed到位,并使用
    AlphaBlend
    绘制透明图像/抗锯齿线等。最后一个肯定是硬件加速,因为我在测试例程时测量了速度

  • 那么你会把钱放在哪里?Direct2D值得这么麻烦吗?还是你会坚持使用好的老GDI?或者你会提出别的建议吗


    注意:我在C++ BTW编程,没有使用MFC。

    ,正如软件依赖穆尔定律不可避免的行进提供越来越多的马力,GDI+和DIGT2D似乎是基于屏幕分辨率(像素密度)将继续提高的事实。但事实是,像素密度并没有显著增加,而且表面上已经达到了一个平台

    GDI文本的设计假设分辨率很差。像素对齐、暗示以及随后的亚像素渲染(如ClearType)都是精心设计的折衷方案,它们将现实生活中每英寸75-100像素的可读性约束与缩放和旋转等任意变换的通用性进行了权衡

    如果我们的屏幕的像素密度接近现代打印机的像素密度,我很乐意放弃这些折衷方案,转而支持通用性。但我们不在那里。我们还没接近呢。就我个人而言,正是由于这些原因,我发现VS 2010中的编辑器比VS 2008中的编辑器可读性差得多

    需要考虑的事情:除了屏幕,你还需要担心其他设备吗?打印机?Direct2D是否处理打印机,或者您是否必须实现GDI解决方案?Windows XP有多重要?你想成为怎样的未来证明?Direct2D显然是微软试图让所有人改变的方向


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

    解决问题的方法非常简单。Direct2D是高度可配置的,其中包括文本呈现和提示。如果要使其渲染文本与GDI的渲染匹配(即非常紧密的像素对齐),只需执行以下操作:

    • 在渲染目标上调用SetTextRenderingParams函数
    • 传入IDWriteRenderingParams,在该参数上可以使用GDI_CLASSIC或GDI_NATURAL(建议使用NATURAL)的值调用SetRenderingMode。该对象还可以通过多种其他方式进行配置,包括变量ClearType、gamma和contrast
    由于另一个答案是毫无帮助的,并且抨击了Direct2D中的渲染,所以让我提供Direct2D文本渲染的另一个概述。非常非常好。与Mac电脑不同,Mac电脑基本上不提示字体,文本实际上显示为模糊,默认情况下,Direct2D仅在Y方向提供强烈提示。这是有道理的,因为您的显示器在垂直方向上可能有大约96 dpi,但通过亚像素消除混叠,水平分辨率超出了合理的人类感知范围。它的ClearType用法和暗示也比GDI微妙得多。与Direct2D相比,GDI文本的边缘往往非常彩色。我发现GDI文本现在看起来非常粗糙,在长时间阅读时,我更喜欢Firefox和IE中的Direct2D文本

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

  • 首先,花点时间在控制面板中运行ClearType调谐器程序。您会惊讶于Direct2D程序中的差异
  • 无论它有多好,当您将它放在应用程序中GDI间隔文本旁边时,它总是显得很奇怪。尝试将UI中的所有内容都设置为一个或另一个,或者清楚地将内容区域与其他区域区分开来。如果您决定将所有内容设置为GDI间隔,只需使用我上面描述的方法将Direct2D设置为GDI间隔文本模式
  • 您尚未安装Windows Update中的所有可用更新。DirectWrite和IE已经有了一些改进。请确保全部安装并重新启动以查看改进
  • 你只是还没习惯而已
  • 在你的脑子里。真正地一旦开始大量考虑文本呈现,您可能会发现自己注意到了不存在的“问题”。这个问题的另一个答案就是一个完美的例子。他表示,他认为VisualStudio2010中的文本比2008年更模糊,但它们实际上是像素完美的副本。不相信我?VS开发人员实际上自己提供了一些比较。我打赌你看不出有什么区别
    啊,所以微软在字体方面终于走上了苹果的道路。我会说,使用Direct2D