2014-03-03 44 views
1

我在Qt中的视频上覆盖了一个透明图像(QImage)。我只想在点击按钮时更改透明图像的颜色。有人能告诉我如何做到这一点?在Qt中更改透明图像的颜色

谢谢。

+1

有2幅图像,并将它们 –

+0

之间交换但我要的颜色设置不同的范围。它不需要是固定的颜色。如果是这种情况,那么可以做些什么? – Sid411

+0

“改变颜色”是什么意思? – Mitch

回答

6

这可以通过很多方式完成。我建议使用QPainter来创建新图像。如果您设置了SourceIn合成模式,则起始图像的Alpha通道将应用于您将执行的任何绘制。你只需要用想要的颜色填充图像。

QPixmap source_image; // should be preserved in a class member variable 
QRgb base_color; // desired image color 

QPixmap new_image = source_image; 
QPainter painter(&new_image); 
painter.setCompositionMode(QPainter::CompositionMode_SourceIn); 
painter.fillRect(new_image.rect(), base_color); 
painter.end(); 

ui->label->setPixmap(new_image); // showing result 

请注意,我用QPixmap代替QImage因为QPixmap s为更有效地显示(也可能是油漆)。如果您由于某种原因仍想使用QImage,则此代码将与QImage一起使用,不做任何更改(当然不包括最后一行)。

图片来源:source image             结果:result

+0

我试过这种方法。这是说不能用QImage :: Format_Indexed8格式在图像上绘制。 这是因为它是一个PNG透明图像。 – Sid411

+0

我试过使用image-> setColor,因为它是一个format8图像。在这种情况下,它甚至可以绘制透明的区域。我只想要非透明部分采取颜色。 谢谢 – Sid411

+1

索引8格式不是透明度所必需的。 ARGB32格式是常用的。使用'source_image = source_image.convertToFormat(QImage :: Format_ARGB32);'将图像转换为可绘制格式。 –