Qt 5 在QPixmap上绘图(不规则闭合图形)并保存为图像

本文介绍了一种使用 C++ 在 QPixmap 上绘制不规则闭合图形 Mask 的方法。通过设置画笔颜色并利用 QPainter 绘制指定尺寸的黑色背景,接着用白色填充不规则闭合图形来实现 Mask 的绘制。最后将绘制好的图像保存到指定路径。

# 用来存储在图片上标注的mask

.cpp

#include <QPainter>
#include <QPixmap>
... ...
int mask_width = INT, mask_height = INT; //绘制图像的大小
QPixmap pixmap(mask_width, mask_height);
QPainter painter(&pixmap);
//绘制背景, 若不重绘背景,保存的图像中可能会出现奇奇怪怪的点
painter.setBrush(Qt::black);
painter.drawRect(QRect(0, 0, mask_width, mask_hight)); 
painter.setBrush(Qt::white);
QPolygon mask_points;
for(... ...){
    mask_points << QPoint(axis_x, axis_y);
    //要绘制的不规则闭合图形的顶点坐标
}
painter.drawConvexPolygon(mask_points);
pixmap.save(PATH); //保存绘制好的图像

 

在PyQt5中,QPixmap是用于显示图像的类,而QPainter则提供了丰富的绘图API,可以用来在QPixmap对象上绘制复杂的图形。以下是一个使用QPainter在QPixmap绘制图形,实现保存与加载图像的基本步骤。 参考资源链接:[Python PyQt5 GUI绘图板实现与代码解析](https://wenku.csdn.net/doc/645caaad59284630339a48e2?spm=1055.2569.3001.10343) 首先,确保已经正确安装了PyQt5导入必要的模块。然后创建一个继承自QWidget的类,在其中使用QPixmap作为绘图区域,通过覆盖paintEvent()方法来处理绘图逻辑。 示例代码如下: ```python from PyQt5.QtWidgets import QWidget from PyQt5.QtGui import QPainter, QPixmap, QImage from PyQt5.QtCore import QPoint import sys class DrawingBoard(QWidget): def __init__(self, parent=None): super(DrawingBoard, self).__init__(parent) self.pix = QPixmap(600, 500) self.pix.fill(Qt.white) # 设置绘图板背景为白色 def paintEvent(self, event): painter = QPainter(self.pix) # 示例:绘制一个红色圆形 painter.setPen(Qt.red) painter.drawEllipse(200, 150, 100, 100) painter.end() def saveImage(self): # 将QPixmap转换为QImage保存为文件 image = QImage(self.pix.toImage()) image.save('drawing.png') def loadImage(self): # 加载图像文件到QPixmap self.pix = QPixmap('drawing.png') # 创建应用程序实例运行 app = QApplication(sys.argv) drawingBoard = DrawingBoard() drawingBoard.show() drawingBoard.saveImage() # 保存当前绘图板内容 drawingBoard.loadImage() # 加载之前保存图像 sys.exit(app.exec_()) ``` 在这个例子中,`paintEvent`方法负责绘制一个红色的圆形。`saveImage`方法将当前的QPixmap对象转换为QImage,使用save()方法将图像保存为PNG文件。`loadImage`方法则演示了如何从文件中加载图像QPixmap对象。 通过以上步骤,你可以在PyQt5应用程序中灵活地绘制各种复杂的图形,且可以将用户的绘图内容保存到文件,或者从文件中加载图像内容到绘图板上。如果需要进一步深入了解PyQt5绘图板的实现细节,以及如何处理更多的绘图操作,可以参考《Python PyQt5 GUI绘图板实现与代码解析》。该资料提供了详细的实现代码和注释,能够帮助你更好地掌握绘图板的开发技巧。 参考资源链接:[Python PyQt5 GUI绘图板实现与代码解析](https://wenku.csdn.net/doc/645caaad59284630339a48e2?spm=1055.2569.3001.10343)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值