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