Direct2D interface and blurry text issue

感情迁移 提交于 2019-12-05 08:23:37

The fix to your problem is very simple. Direct2D is highly configurable, and that includes text rendering and hinting. If you want to make it render text to match GDI's rendering (that is, very tight pixel alignment) just:

Since the other answer went out of its way to be most unhelpful and bash the rendering in Direct2D, let me provide another overview of Direct2D's text rendering. It is very, very good. Unlike on the Mac, where they basically do not hint fonts and the text actually comes out as blurry, Direct2D by default strongly hints in the Y direction only. This makes sense since your monitor probably has about 96 dpi vertically, but with sub-pixel anti-aliasing the horizontal resolution is beyond the range of reasonable human perception. It is also a lot more subtle in its ClearType usage and hinting than GDI was. The edges of GDI text tend to be very colorful compared to Direct2D. I find GDI text very harsh-looking nowadays and much prefer the Direct2D text in Firefox and IE for long reading sessions.

Therefore, there are several reasons that the default mode probably appears "blurry" to you.

  1. First of all, take the time to run the ClearType tuner program in the control panel. You will be amazed at the difference in Direct2D programs.
  2. No matter how good it is, it will always appear strange when you place it next to GDI-spaced text in your application. Try making everything in the UI one or the other, or clearly distinguish the content area from the other areas. If you decide to make everything GDI-spaced, just use the method I described above to set Direct2D to GDI-spaced text mode.
  3. You haven't installed all available updates from Windows Update. There have been several for DirectWrite and IE. Make sure you install them all and restart to see the improvements.
  4. You just haven't gotten used to it yet.
  5. It's in your head. Really. Once you start thinking about text rendering a lot, you'll probably find yourself noticing "problems" that aren't there. The other answer to this question is the perfect example. He states that he thinks the text in Visual Studio 2010 is blurrier than 2008, but they are actually pixel perfect copies. Don't believe me? The VS developers actually provided some comparisons yourself. I bet you can't tell the difference. http://blogs.msdn.com/b/text/archive/2010/03/05/additional-wpf-text-clarity-improvements.aspx

Just as much software relies on the inevitable march of Moore's law to offer more and more horsepower, GDI+ and Direct2D seem predicated on the fact that screen resolutions (pixel density) would continue to improve. But the fact is that pixel density has not increased significantly and, in face, has reached a plateau.

GDI text was designed with the assumption that resolutions suck. Pixel alignment, hinting, and later sub-pixel rendering (such as ClearType) are all well-engineered compromises that weighed the real-life constraint of readability at 75-100 pixels per inch against the generality of arbitrary transforms like scaling and rotation.

If our screens had pixel densities closer to what modern printers can produce, I'd be happy to surrender these compromises in favor of generality. But we're not there. We're not even close. Personally, I find the editor in VS 2010 far less readable than the one in VS 2008 for exactly these reasons.

Things to consider: Do you have to worry about devices other than the screen? Printers? Does Direct2D handle printers or do you have to implement a GDI solution anyway? How important is Windows XP? How future proof do you want to be? Direct2D is clearly the direction Microsoft is trying to move everyone.

Things not to consider: Speed. I've yet to see any modern application limited by the speed of rendering text to the screen, regardless of the technology. It's a highly optimized path. The actual layout is probably much more of a bottleneck than setting pixels values on the screen. If you're animating a zoom of a full screen, then maybe you need Direct2D--not for speed, but for the general transforms and smooth scaling.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!