用'color mod'绘制QPixmap的最佳方法

时间:2019-03-04 17:54:18

标签: qt qt5

某些渲染库允许在绘制纹理时设置“颜色模”(例如,在SDL2中使用SDL_SetTextureColorMod进行设置),这将有效地在绘制之前将像素的颜色乘以给定值。例如,当用QPixmap绘制QPainter::drawPixmap时,在Qt5中实现此目的的最佳方法是什么?到目前为止,我看到的唯一选择是使用临时像素图,用我要乘以的颜色填充它,然后用QPainter::CompositionMode_Multiply在其上绘制,然后将结果绘制到目标设备。是否有更直接的方法,可能不包括绘制到临时像素图?

1 个答案:

答案 0 :(得分:1)

您可以通过在目标中绘制具有像素图大小的矩形来消除temporay像素图:

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