PyQt中为QPixmap添加空白区域(复制原图至高分辨率空白画布)
QPixmap垂直扩展画布解决方案
原始图片

新图片

问题描述
原始QPixmap尺寸为300x300,需在Y轴方向扩展200像素得到300x500的新图,该如何实现?
当前代码:
# 当前代码 pixmap = QtGui.QPixmap(WIDTH, HEIGHT) pixmap.fill(Qt.transparent) self.setPixmap(pixmap) # 尝试的新代码 pixmap = self.pixmap().scaled( WIDTH, NEW_HEIGHT, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) self.setPixmap(pixmap)
已尝试方案
- 缩放:会拉伸整个图像导致失真
- 创建新空白画布:需用户重新绘制,操作不便
应用场景
基于PyQt开发的绘图APP,为画布添加滚动条,通过按钮向下扩展画布以继续绘制。
解决方案
要实现只扩展高度且保留原有绘制内容,不用缩放或重新绘制,正确做法是创建新的大尺寸Pixmap,把原内容绘制到新画布顶部,下方留空白。
代码示例:
# 获取当前显示的Pixmap original_pixmap = self.pixmap() # 计算新尺寸:宽度不变,高度增加200 new_width = original_pixmap.width() new_height = original_pixmap.height() + 200 # 创建新的透明背景Pixmap new_pixmap = QtGui.QPixmap(new_width, new_height) new_pixmap.fill(Qt.transparent) # 用QPainter把原Pixmap绘制到新画布的顶部位置 painter = QtGui.QPainter(new_pixmap) painter.drawPixmap(0, 0, original_pixmap) painter.end() # 更新控件显示的Pixmap self.setPixmap(new_pixmap)
这个方法完全保留原有绘图内容,只是在底部添加空白区域,不会出现拉伸失真,也不需要用户重新操作。如果要在顶部扩展,只需调整drawPixmap的Y坐标参数为200,把原内容从(0,200)位置开始绘制即可。
内容的提问来源于stack exchange,提问作者Salik Malik
相关产品推荐
相关产品推荐

