使用“color mod”绘制 QPixmap 的最佳方法

Posted

技术标签:

【中文标题】使用“color mod”绘制 QPixmap 的最佳方法【英文标题】:Best way to draw QPixmap with 'color mod' 【发布时间】:2019-03-04 17:54:17 【问题描述】:

一些渲染库允许在绘制纹理时设置“颜色模式”(例如,在 SDL2 中,您使用 SDL_SetTextureColorMod 进行设置),这将在绘制之前有效地将像素的颜色乘以给定值。在 Qt5 中实现这一点的最佳方法是什么,例如,用QPainter::drawPixmap 绘制QPixmap 时?到目前为止,我看到的唯一选择是使用临时像素图,用我想要乘以的颜色填充它,然后用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);

如果您的像素图有透明区域,您可以在调用fillRect 之前添加painter->setClipRegion(src.mask());

【讨论】:

我认为这不适用于我要绘制的像素图包含半透明像素(alpha 不等于 0 或 1)的情况,并且我想将其混合到已经有一些背景的设备。

以上是关于使用“color mod”绘制 QPixmap 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 QPainter 在 QWidget 上绘制 QPixmap Rects

QLabel 上的 QPixmap 无法正确显示

QGraphicsTextItem 的 QPixmap

如何使用 QPainter + QPixmap 实现鼠标绘图?

QT 三大绘图类:QPixmap/QImage/QPicture

如何使用 Qt 在屏幕上绘制选择矩形?