Лучший способ нарисовать QPixmap с помощью ‘color mod’

#qt #qt5

#qt #qt5

Вопрос:

Некоторые библиотеки рендеринга позволяют устанавливать ‘color mod’ (например, в SDL2 вы делаете это с помощью SDL_SetTextureColorMod ) при рисовании текстуры, что эффективно умножает цвета пикселей на заданное значение перед рисованием. Каков наилучший способ добиться этого в Qt5, например, при рисовании QPixmap с QPainter::drawPixmap помощью? Пока единственный вариант, который я вижу, — это использовать временную пиксельную карту, залить ее цветом, на который я хочу умножить, затем нарисовать на ней с помощью QPainter::CompositionMode_Multiply , а затем перенести результат на целевое устройство. Есть ли более простой способ, который, возможно, не включает отрисовку временного пиксельного изображения?

Ответ №1:

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

 QPixmap const src(":/images/img.png");
painter->fillRect(QRect(QPoint(0, 0), src.size()), Qt::red);
painter->setCompositionMode(QPainter::CompositionMode_Multiply);
painter->drawPixmap(QPoint(0, 0), src);
  

Если в вашей пиксельной карте есть прозрачные области, вы можете добавить их painter->setClipRegion(src.mask()); перед вызовом fillRect .

Комментарии:

1. Я не думаю, что это сработает в случае, когда пиксельная карта, которую я хочу нарисовать, содержит полупрозрачные пиксели (с альфа-значением, не равным 0 или 1), и я хочу наложить ее на устройство, в котором уже есть некоторый фон.