QPainter рисование линий - настройка мягкости линий (горизонтальный градиент непрозрачности) - PullRequest
0 голосов
/ 18 мая 2018

Я ищу способ применения горизонтального градиента непрозрачности при рисовании элементов QLine с использованием QPainter.Проще говоря, я хочу, чтобы непрозрачность линии уменьшалась по мере удаления от центра линии, на которой она рисуется.Эффект, которого я хочу достичь, соответствует тому, что многие инструменты редактирования изображений обычно называют твердостью кисти.

Вот пример изображения, которое сравнивает линию с помощью жесткой кисти с мягкой:

soft and hard line brush

Это будет минимумПример для рисования обычного QLine:

QPainter p;
p.setPen(QPen(Qt::black, 12, Qt::SolidLine, Qt::RoundCap));
p.drawLine(QPointF(0,0), QPointF(1024,1024));

Как и где я бы настроил описываемую жесткость линии?Есть ли что-то вроде свойства отступления при рисовании элементов QLine?

В документах я мог только найти примеры того, как применять линейные градиенты между заданными точками, а это не то, что я ищу.

1 Ответ

0 голосов
/ 18 мая 2018

Это не QPen рисование, это рисование кистью, как, скажем, в Photoshop, и Qt действительно не поддерживает такую ​​функциональность из коробки.

Но это довольно просто реализовать, вам нужно растровое изображение кисти, и вы просто рисуете это растровое изображение на целевом устройстве рисования вдоль линии на данном шаге.

На часть интерполяции линии уже дан ответ здесь .

Рекомендуется, чтобы трафарет кисти представлял собой 8-битную шкалу серого QImage, тогда вы можете легко получить раскрашенныйверсия этого с использованием значения оттенков серого в качестве альфа-значения для выбранного сплошного цвета.QImage предпочтительнее, так как предоставляет доступ к отдельным пикселям.Это позволяет использовать любой тип кисти, кроме жестких и мягких, включая определенные художественные кисти.

Естественно, если вам нужна только мягкая кисть, вы можете создать ее непосредственно в желаемом цвете, используя существующие градиенты Qt.и пропустите цветную часть трафарета.

...