gpt4 book ai didi

qt - 将 QWidget 渲染到 QImage 会丢失 alpha channel

转载 作者:行者123 更新时间:2023-12-04 23:25:29 26 4
gpt4 key购买 nike

我有一个简单的 Qt 小部件。它是一个应用了简单 CSS 样式的 QLabel。样式的重要部分是圆形边框:

QString css("border-style: solid;"
"border-width: 3px;"
"border-radius: 7px;");

它在屏幕上显示正常。超出边框的标签角用透明色填充,因此在任何背景下看起来都很棒。这是显示在另一个小部件(具有深灰色背景颜色)上时的外观:

enter image description here

现在,当我像这样将它渲染到 QImage 时

QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");

我明白了(在图像编辑器中打开图像以清楚地演示问题):

enter image description here

请注意角落周围的透明度是如何不保留的。有什么问题?如何正确渲染它?

P. S. 我试过这个来测试 QImage 是否能够保存 alpha channel ,以及我的图像编辑器是否正确显示它:

bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");

它工作正常,我可以看到透明度为方格图案。

最佳答案

这就是诀窍:

QImage bitmap(label->size(), QImage::Format_ARGB32);
bitmap.fill(Qt::transparent);
QPainter painter(&bitmap);
label->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);

关于qt - 将 QWidget 渲染到 QImage 会丢失 alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20324409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com