为什么这段代码会使 QImage 失去其 Alpha 通道?
我试图理解为什么下面的代码会改变 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(...)
行的结果:
我希望我的代码不会执行任何操作在图像上进行更改。知道为什么要这样做吗?
I'm trying to understand why the code below changes the QImage in Qt. It's not meant to do anything (yet), it's just for testing. When I run the code on an image with alpha, the alpha channel is lost and replaced by a black background.
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());
}
}
Here is the result when I comment out the line image.setPixel(...)
:
And here is the result with the image.setPixel(...)
line:
I would expect my code to do no change on the image. Any idea why it's doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您查看 setHsv() 的文档,您会看到如果您没有明确指定,alpha 默认设置为 255(对于浮点版本为 1.0)。
也许使用 c.setHsv(c.hue(), c.saturation(), c.value(), c.alpha()); 行可以解决您的问题。
If you look at the documentation of setHsv(), you will see that alpha is set by default to 255 (or 1.0 for the float version) if you don't explicitly specify it.
Perhaps using the line
c.setHsv(c.hue(), c.saturation(), c.value(), c.alpha());
will resolve your problem.