QT 显示 透明PNG
时间: 2023-11-26 17:06:51 浏览: 312
在QT中显示透明PNG图片可以使用QImage和QPixmap两种方式。其中,QImage是像素级操作,可以生成透明图片,但是需要注意,如果读入的图片本身不支持alpha通道,就无法对其alpha值进行修改。\[1\]\[2\]另外,可以使用QPixmap来生成透明图片,可以通过设置QPainter的renderHint为QPainter::Antialiasing来实现抗锯齿效果。具体的代码示例如下:
```cpp
QWidget *widget = new QWidget;
QPixmap result_pixmap(widget->size());
result_pixmap.fill(Qt::transparent);
QPainter painter(&result_pixmap);
painter.setRenderHint(QPainter::Antialiasing);
QRectF rectF = widget->rect();
widget->render(&painter, QPoint(), QRegion(widget->rect()));
result_pixmap.save("D:/pixmap.png");
```
这段代码可以生成一个透明的QPixmap,并保存为PNG格式的图片。\[1\]
另外,如果需要处理一张jpg格式的图片,将其转换为背景透明的png图片,可以使用QImage来实现。具体的代码示例如下:
```cpp
QImage image("your_image.jpg");
image = image.convertToFormat(QImage::Format_ARGB32);
for (int y = 0; y < image.height(); ++y) {
for (int x = 0; x < image.width(); ++x) {
QRgb pixel = image.pixel(x, y);
if (qAlpha(pixel) < 255) {
image.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), 0));
}
}
}
image.save("D:/image.png");
```
这段代码将读入的jpg图片转换为ARGB32格式的QImage,并将alpha通道值小于255的像素点的alpha值设为0,实现了背景透明的效果。\[2\]\[3\]
#### 引用[.reference_title]
- *1* [QT - 图像处理 ( 7 ) - 生成透明色图片](https://blog.csdn.net/LearnLHC/article/details/96867622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [Qt处理照片实现白色背景转透明](https://blog.csdn.net/weixin_30313409/article/details/117602750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文