В устаревшем приложении MFC я пытаюсь нарисовать темно-красный цвет (255, 26, 26) на фоне темы «Углерод» (97, 107, 136) в диалоговом окне.Хотя я использую библиотеку BCGSoft MFC , чтобы обернуть код, который рисует текст, основной код, выполняющий рисование текста, следующий:
// CODE THAT DRAWS THE TEXT
// Copied from BCGSoft's 'BCGPStatic.cpp' text-drawing routine
// clrText is RGB(255, 26, 26)
COLORREF clrTextOld = pDC->SetTextColor (clrText);
// background is RGB(97, 107, 136)
pDC->SetBkMode (TRANSPARENT);
pDC->DrawText (strText, rectClient, uiDTFlags);
Проблема заключается в следующем: текстотображается неприемлемо пятнистый:
BLOTCHY TEXT
Если изменить цвет (ибольше ничего) до светло-красного (255, 164, 164), текст отображается очень хорошо:
ХОРОШИЙ ТЕКСТ
Поскольку шрифт, вероятно, имеет значение, вот код, который устанавливает шрифт:
// SETTING THE FONT
CFont * currentFont = staticCtl.GetFont();
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
currentFont->GetLogFont(&lf);
lf.lfHeight = 18;
lf.lfWeight = FW_BOLD;
// I have ALSO TRIED:
// CLEARTYPE_QUALITY
// ANTIALIASED_QUALITY
// NONANTIALIASED_QUALITY
// PROOF_QUALITY
// ...and just leaving it unset
lf.lfQuality = CLEARTYPE_NATURAL_QUALITY;
m_staticFontRed.CreateFontIndirect(&lf);
staticCtl.SetFont(&m_staticFontRed);
// The following are specific to BCGSoft
staticCtl.m_hFont = (HFONT)(m_staticFontRed.GetSafeHandle());
staticCtl.m_clrText = RGB(255, 164, 164);
Я тщательно исследовал это и попытался использовать столько «обходных путей», сколько смогудумать о.В частности:
- Используйте
TextOut
вместо DrawText
- Установите
SetBkMode(OPAQUE)
и просто заполните фон FillRect
перед рисованием текста - Удалить
FW_BOLD
от шрифта - Как отмечено во фрагменте кода, попробуйте различные «качества» в
LOGFONT
(NONANTIALIASED_QUALITY
и т. Д.)
Чтоможно сделать, используя MFC / WinAPI (очевидно, в C ++), чтобы заставить мой выбор цвета для текста и фона работать так, чтобы текст был неприемлемо пятнистым?
ADDENDUM
Основываясь на комментарии @ BarmakShemirani, я увеличил пиксели и обнаружил, что они КРАСНЫЕ (после создания снимка экрана в виде растрового изображения).Поэтому, наверняка, казалось бы, эти пиксели генерируются на мониторе как КРАСНЫЕ и просто так не воспринимаются глазом.)
Вот изображение увеличенной версии:
... Красные пиксели присутствуют (пятно исчезло).
Теперь я подозреваю, что это проблема с монитором, ине так, как пиксели рисуются на экране или человеческим глазом.
Благодаря @BarmakShemirani!
ADDENDUM 2
Я использую свой монитор в портретном режиме, что нетипично.Я просто повернул монитор в альбомную ориентацию, и тот же скриншот в моем вопросе значительно менее пятнистый.Это заставляет меня поверить, что это в основном проблема с МОНИТОРОМ, а не проблема ОС или «человеческого глаза».
... Интересно, некоторые мониторы справляются с этой ситуацией лучше, чем другие, или это «встроено»?большинству мониторов по какой-либо (уважительной) причине?