用 DWrite 绘制的文本模糊

Text drawn with DWrite is blurry

我最近在开发自己的 GUI 库。 window 是使用 Win32 API 创建的,然后在内部创建了 Direct2D RenderTarget。所有绘图(按钮、标签等)都发生在 RenderTarget 内部。一切都很好,除了文本的质量。例如,当我查看 visual studio 按钮时,与 DirectWrite 方法 DrawTextW() 相比,文本看起来非常清晰。

这是一个图像示例:

我用DirectWrite直接画文字。 `

ID2D1SolidColorBrush* brush;
RenderTarget->CreateSolidColorBrush(D2D1::ColorF(red, green, blue, alpha), &brush);

IDWriteTextFormat* format;
HRESULT h = WriteFactory->CreateTextFormat(std::wstring(font.begin(), font.end()).c_str(), NULL, fontWeight,
    fontStyle, DWRITE_FONT_STRETCH_NORMAL, fontSize, L"", &format);

// Center the text horizontally and vertically.
format->SetTextAlignment(textAllignment);
format->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

// Draw text
RenderTarget->DrawTextW(std::wstring(text.begin(), text.end()).c_str(), std::wstring(text.begin(), text.end()).size(), format, D2D1::RectF(xPos, yPos, xPos+width, yPos+height), brush);

brush->Release();
format->Release();

`

我只是想知道,这是我应该接受并继续前进的东西,还是我必须使用 DWriteFactory 进行一些调整?

您似乎拥有高 DPI 显示器,但没有为您的可执行文件定义正确的清单。默认情况下 Windows 会认为您的应用程序是为旧的 96ppi 系统设计的,因此如果您的显示器使用 192ppi,则每个 "pixel" 将跨越四个物理像素。

勾选this for how to add high-DPI awareness您的申请。

在 Visual Studio 2015 及更高版本中,项目设置中有一个标志:"Configuration Properties > Manifest Tool > Input and Output > DPI Awareness"