【发布时间】:2012-01-26 14:09:24
【问题描述】:
我已经知道亚像素定位会导致DirectWrite text rendering to be blurry compared to GDI。
但是,我的问题更基础:为什么 DirectWrite(和相关方法)不能像 GDI 一样清晰地呈现文本?
换句话说:
是什么阻止了 DirectWrite 能够像 GDI 那样将文本捕捉到最近的像素?
例如,是硬件问题吗?驱动架构问题?它根本没有实施吗?还是别的什么?
小样本:
更大的样本:
Direct2D,别名:
Direct2D,默认:
Direct2D(“经典 GDI”):
Direct2D(“自然 GDI”):
实际经典 GDI:
实际 ClearType GDI:
注意:如果所有在您看来都模糊不清,请运行
document.body.style.zoom = 1 / window.devicePixelRatio
在 Chrome 的控制台中,然后查看。
【问题讨论】:
-
嗯,是的,我想看看这个问题的答案。这些技术产生的文本过于模糊,不值得使用;我什至不能使用通过 DirectWrite 呈现文本的产品(咳嗽,Firefox)。不幸的是,我有一个偷偷摸摸的怀疑,答案是从事该项目的人都认为这很重要。
-
因为像素对齐使得渲染文本的宽度无法预测。分辨率无关的文本渲染是圣杯。被 GDI+、WPF 的硬性要求和显示技术的可持续改进所困扰。
-
DWrite 可以做到,你只需要问。创建 custom render parameters 并将
clearTypeLevel设置为零。请注意,清晰度是以牺牲准确性为代价的。例如,请参阅 the rotated text 以及它在 GDI 中看起来有多厚实,以及与子像素相比,GDI 中的间距有多不均匀。 -
@RaymondChen:我之前实际上已经尝试过(在尝试查看 SciTE 的加速文本渲染是否可以变得更清晰时),但它不起作用。也许我做错了——你有一段演示代码可以显示它的渲染很清晰吗?
-
@Mehrdad 我自己从未尝试过,但从阅读文档看来它应该可以工作。也许它只是切换到灰度抗锯齿?无论如何,如果您不喜欢 DirectWrite,请不要使用它。 (与其说宽度是不可预测的,不如说它是不均匀的。在低分辨率下,整个像素都很大。)
标签: winapi directx gdi smoothing text-rendering