我正在尝试在另一张图片上绘制一个图像(这部分已经实现),但是在绘制覆盖图像之前,我想要降低它的不透明度。这就是我遇到困难的地方。我的覆盖图像是PNG格式的,并且它们本身具有透明区域,否则它们的内容是黑色的。在Qt中,我正在循环遍历每个像素,但我无法确定像素是否透明 - 它告诉我每个像素都是完全不透明的黑色。我已经尝试检查像素颜色和α值,但我肯定做错了。搜索没有给出解决方案。这是我使用的小循环:
// Set Alpha
for (int x = 0; x < overlay.width(); x++)
{
for (int y = 0; y < overlay.height(); y++)
{
pixelColor = QColor(overlay.pixel(x,y));
if (pixelColor.alpha() == 255)
{
overlay.setPixel(x, y, QColor(0,0,0,200).rgba());
//qDebug() << "Not Skipped";
}
else
{
qDebug() << "Skipped";
}
}
}
QImage指出我的叠加图像格式为Format_ARGB32。有人知道我做错了什么吗?根据Qt文档,我应该能够使用alpha()函数,但它为每个像素返回255。也许我获取的颜色不正确?
QImage::pixelColor()
(而不是QImage::pixel()
)是否足以解决问题? - Scheff's CatQImage::pixelColor()
是在 Qt 5.6 中引入的,晚于这个问题/答案。现在可能有更好的解决方案。我会更新答案以反映这一点。 - kestrel