You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt中为QPixmap添加空白区域(复制原图至高分辨率空白画布)

QPixmap垂直扩展画布解决方案

原始图片

input

新图片

output

问题描述

原始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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:05:14