PNG中的QImage设置alpha具有透明度

时间:2014-07-29 17:59:13

标签: qt transparency

我正在尝试在另一个上绘制图像(并且该部分有效)但在绘制叠加图像之前我想减少它的不透明度。这是我遇到麻烦的地方。我的叠加图像是PNG,它们本身有透明区域,否则它们的内容是黑色的。在Qt中,我循环遍历每个像素,我无法确定像素是否透明 - 它告诉我每个像素都是黑色的,具有完整的alpha。我已经尝试检查像素颜色和alpha但我必须做错了。搜索没有导致解决方案。这是我正在使用的小循环:

// 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。也许我的颜色错了?

1 个答案:

答案 0 :(得分:2)

问题在于QColor(QRgb) constructor

  

使用值颜色构造颜色。忽略alpha组件并将其设置为solid。

您遇到此问题,因为QImage::pixel(int,int)会返回QRgb。您应该使用QImage::pixelColor(int,int)代替(如果可用,在Qt 5.6中引入),或直接使用QRgb,如下所示:

QRgb col = image.pixel(x,y);
if(qAlpha(col) == 255) {}

请注意,如果您想降低图片的不透明度,可以随时change the QPainter opacity