QPainter: как добавить текст без артефактов в шрифте
Qt5, C++. Программно рисую картинку, на которую необходимо добавить текстовое содержимое. Какой бы шрифт не использовал - на выходе получаю артефактные гличи: буквы испещрены точками, неточностями, "шумом".
Краткий пример моего кода и скриншот:
m_font.setFamily(family);
m_font.setPointSize(FONT_SIZE);
m_font.setBold(true);
QPainterPath path;
QFontMetrics fm(m_font);
path.addText(0, fm.height(), m_font, "LOREM IPSUM");
QPainter painter;
painter.begin(&img);
painter.setBrush(Qt::black);
painter.drawPath(path);
painter.end();
Пробовал играться с масштабом - большого толку нет: увеличил изображение и шрифт в 10 раз, а при выводе картинки использовал QImage::scaled(X, Y). Скриншот:
Как получить "гладкое" начертание букв на итоговой картинке?
Ответы (2 шт):
Задал Render hint объекту QPainter:
painter.setRenderHint(QPainter::Antialiasing);
Стало значительно лучше.
Не надо использовать для такой задачи QPainterPath
Вот такой сниппет я использовал для тестирования
QFont font;
font.setPointSize(52);
font.setBold(true);
QString example = "LOREM IPSUM 1234567890$%^";
QPainterPath path;
QFontMetrics fm(font);
path.addText(0, fm.height(), font, example);
QImage img(900, 200, QImage::Format_ARGB32);
img.fill(Qt::white);
QPainter painter;
painter.begin(&img);
painter.setBrush(Qt::black);
painter.drawPath(path);
painter.setFont(font);
painter.drawText(QPointF(0, fm.height() * 2), example);
painter.end();
И вот результат. Верхняя надпись как у вас, нижняя drawText



