用DWrite绘制的文字模糊

时间:2018-08-26 20:25:17

标签: c++ direct2d directwrite

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

这是一个图像示例:

image

我使用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进行调整?

1 个答案:

答案 0 :(得分:0)

似乎您具有高DPI监视器,并且尚未为可执行文件定义适当的清单。默认情况下,Windows会认为您的应用是为旧的96ppi系统设计的,因此,例如,如果您的显示器使用192ppi,则每个“像素”将跨越四个物理像素。

检查this for how to add high-DPI awareness到您的应用程序。

在Visual Studio 2015及更高版本中,项目设置中有一个标记:“配置属性>清单工具>输入和输出> DPI意识”