为什么这段代码会让QImage失去alpha通道?

时间:2011-08-08 17:16:42

标签: qt qimage alpha-transparency

我试图理解为什么下面的代码会改变Qt中的QImage。它并不意味着做任何事情(还),它只是用于测试。当我在带有alpha的图像上运行代码时,Alpha通道会丢失并被黑色背景替换。

QImage image;
image.load("image.png");

for (int y = 0; y < image.height(); y++) {
    for (int x = 0; x < image.height(); x++) {
        QColor c = QColor::fromRgba(image.pixel(x, y));
        c.setHsv(c.hue(), c.saturation(), c.value());
        image.setPixel(x, y, c.rgba());
    }
}

以下是注释掉image.setPixel(...)行的结果:

enter image description here

以下是image.setPixel(...)行的结果:

enter image description here

我希望我的代码不会对图像进行任何更改。知道为什么会这样做吗?

1 个答案:

答案 0 :(得分:3)

如果查看setHsv()的文档,如果没有明确指定alpha,则会看到alpha默认设置为255(浮点版本为1.0)。

使用第c.setHsv(c.hue(), c.saturation(), c.value(), c.alpha());行可能会解决您的问题。