为啥这段代码会使 QImage 失去它的 alpha 通道?

Posted

技术标签:

【中文标题】为啥这段代码会使 QImage 失去它的 alpha 通道?【英文标题】:Why does this code make the QImage lose its alpha channel?为什么这段代码会使 QImage 失去它的 alpha 通道? 【发布时间】:2011-08-08 17:16:41 【问题描述】:

我试图理解为什么下面的代码会改变 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(...)行时​​的结果:

这是image.setPixel(...) 行的结果:

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

【问题讨论】:

【参考方案1】:

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

也许使用c.setHsv(c.hue(), c.saturation(), c.value(), c.alpha()); 行可以解决您的问题。

【讨论】:

以上是关于为啥这段代码会使 QImage 失去它的 alpha 通道?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我使用 QImage::scaled() 时我的内存消耗很大?

如果 Java 是强类型的,那么为啥这段代码会编译? [关闭]

为啥此代码会使 Visual Studio 2015 崩溃?

QImage:URL而不是文件路径?

为啥这个 angularjs ui-router 代码会使我的浏览器崩溃?

为啥添加 try 块会使程序更快?