Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt中更改透明图像的颜色_Qt_Qimage - Fatal编程技术网

在Qt中更改透明图像的颜色

在Qt中更改透明图像的颜色,qt,qimage,Qt,Qimage,我有一个透明图像(QImage)覆盖在Qt中的视频上。我只想在点击按钮时更改透明图像的颜色。有人能告诉我怎么做吗 多谢各位 这可以通过多种方式实现。我建议使用QPainter创建新图像。如果在合成模式下设置了source,则启动图像的alpha通道将应用于要执行的任何图形。您只需要用所需的颜色填充图像 QPixmap source_image; // should be preserved in a class member variable QRgb base_color; // desire

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


多谢各位

这可以通过多种方式实现。我建议使用
QPainter
创建新图像。如果在合成模式下设置了
source,则启动图像的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
一起使用,而不做任何更改(当然最后一行除外)

源图像:
结果:

有两个图像并在它们之间交换,但我想为颜色设置不同的范围。它不必是固定的颜色。如果是这种情况,那么可以做什么?你所说的“改变颜色”是什么意思?透明图像是黑色的。根据滑块的移动或按钮的点击,颜色必须改变rgb值。我尝试了这种方法。它的意思是不能使用QImage::Format_Indexed8格式在图像上绘制。这是因为它是png透明图像。我尝试使用image->setColor,因为它是format8图像。在这种情况下,它甚至会绘制透明区域。我只希望不透明的部分采用颜色。谢谢Indexed8格式对于透明度来说不是必需的。ARGB32格式是常用的。使用
source\u image=source\u image.convertToFormat(QImage::Format\u ARGB32)将图像转换为可绘制格式。至少在Qt 5.3.1和OS X上的32位上不起作用,或者可能是我做错了什么。我只尝试使用QImage而不是QPixmap,因为我需要使用
source\u image.convertToFormat(QImage::Format\u ARGB32)。我用painter.fillRect(new_image.rect(),QColor(“red”);
代替了
base_color
。我得到了一个空白标签。