我的新应用程序将具有丰富的界面,应该可以动态调整大小使用透明图标/图像等。对于这个应用程序,我正在尝试决定使用新的Direct2D API对抗旧的GDI。其中一个缺点当然是它不能在XP上运行,尽管我发现了一些更糟糕的问题需要决定:
我注意到在Direct2D环境中输出文本似乎有点模糊(尽管作为一项功能推出)。只需查看启用了硬件加速(或IE9)的Firefox 4中的文本。这似乎是因为在Direct2D文本does not adhere to the (pixel) grid中像GDI那样。有没有办法强制Direct2D使其坚持像素网格,从而解决这个问题?
速度真的有这么好吗?我试着理解this文章,我从中得到的是,在Windows 7和XP(不是Vista?)中,GDI已经硬件加速了。例如。在我的应用程序中,我使用了很多内存DC,只是BitBlt
编辑到位,并使用AlphaBlend
绘制绘制透明图像/消除锯齿线等。最后一个肯定是硬件加速,因为我在测试我的例程时测量速度。
那你要把钱放在哪里? Direct2D是值得的麻烦还是你只是坚持好老的GDI?或者你会建议其他什么?
注意:我正在用C ++编程btw,没有使用MFC。
答案 0 :(得分:4)
解决问题非常简单。 Direct2D具有高度可配置性,包括文本呈现和提示。如果你想让它渲染文字以匹配GDI的渲染(即非常紧凑的像素对齐),那就是:
由于另一个答案是最无用的,并且在Direct2D中进行渲染,让我提供另一个Direct2D文本渲染的概述。这非常非常好。与Mac上不同的是,它们基本上没有提示字体并且文本实际上是模糊的,默认情况下Direct2D仅在Y方向强烈暗示。这是有道理的,因为你的显示器可能垂直大约96 dpi,但是对于亚像素抗锯齿,水平分辨率超出了合理的人类感知范围。它的ClearType使用和提示也比GDI更微妙。与Direct2D相比,GDI文本的边缘往往非常丰富多彩。我现在发现GDI文本看起来很苛刻,并且更喜欢Firefox和IE中的Direct2D文本进行长时间阅读。
因此,有几个原因导致默认模式对您来说可能显得“模糊”。
答案 1 :(得分:1)
同样多的软件依赖于摩尔定律的不可避免的进展来提供越来越多的马力,GDI +和Direct2D似乎是基于屏幕分辨率(像素密度)将继续提高的事实。但事实是,像素密度没有显着增加,并且从表面上看,已达到稳定水平。
GDI文本的设计假设决议很糟糕。像素对齐,提示和后来的子像素渲染(例如ClearType)都是精心设计的折衷方案,它们以每英寸75-100像素的可读性的实际约束来衡量任意变换(如缩放和旋转)的一般性。 / p>
如果我们的屏幕的像素密度接近现代打印机可以产生的像素密度,我很乐意放弃这些妥协,转而采用普遍性。但我们不在那里。我们甚至都不亲近。就个人而言,我发现VS 2010中的编辑器远不如VS 2008中的编辑器那么可靠。
需要考虑的事项:您是否需要担心屏幕以外的其他设备?打印机? Direct2D是否处理打印机或者您是否必须实施GDI解决方案? Windows XP有多重要?您希望未来的证据如何? Direct2D显然是微软试图让每个人都感动的方向。
不考虑的事情:速度。我还没有看到任何现代应用程序受限于将文本呈现到屏幕的速度,无论技术如何。这是一条高度优化的道路。实际布局可能比设置屏幕上的像素值更加瓶颈。如果您要为全屏缩放设置动画,则可能需要Direct2D - 不是为了速度,而是为了一般变换和平滑缩放。