Текст, нарисованный с помощью DWrite, размыт - PullRequest
0 голосов
/ 26 августа 2018

Я недавно разрабатывал свою собственную библиотеку 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 голосов
/ 26 августа 2018

Похоже, что у вас монитор с высоким DPI и вы не определили правильный манифест для вашего исполняемого файла.По умолчанию Windows будет думать, что ваше приложение разработано для старых систем 96ppi, и поэтому каждый «пиксель» будет охватывать четыре физических пикселя, если ваш монитор использует, например, 192ppi.

Установите флажок , чтобы узнать, как добавитьDPI DPI для вашего приложения.

В Visual Studio 2015 и выше в настройках проекта есть флаг: «Свойства конфигурации> Инструмент манифеста> Ввод и вывод> DPI Awareness»

...