0

我正在 QTableWidget 的单元格中创建一个带有像素图的标签,并且我希望能够“放大”和缩小表格。我通过缩放像素图来实现这一点,.scaled(width, height)它完全可以正常工作,但是一旦像素图被缩小,我就无法再次放大它并保持原始分辨率。换句话说,一旦它绘制到更小的尺寸,我就不再有这些像素供以后使用,所以当我放大它时,我正在重新采样图像。

我怎样才能做到这一点,以便我能够“放大”然后再次退出像素图,同时有效地保持图像分辨率?scaled() 是完全错误的方式吗?理论上,我每次放大和缩小时都可以参考原始文件并以所需的比例创建一个新的像素图,但这假设文件总是可以访问的(在我的情况下它们可能不是)。

编辑:好的,所以根据评论,我需要为每个缩放周期创建一个新的像素图副本,现在的问题是这样做有多干净,以及如何在不编辑原始像素图的情况下制作像素图的新实例?这是我现在拥有的基本内容的一个片段:

global pixArray
pixArray = []

# pix array
label = QtGui.QLabel()
pic = QtGui.QPixmap(imageFile)
label.setPixmap(pic)
#toss this label into the master array for later
pixArray.append(label)
# apply scaled image
label = pixArray[len(pixArray)-1]
picScaled = label.pixmap()
label.setPixmap(picScaled.scaled(rowWidth, rowHeight))

# so now the user wants to scale everything, rowWidth and rowHeight have changed:
for column in range(self.table.columnCount()):
    # resize the cells
    self.table.setColumnWidth(column, rowWidth)
    self.table.setRowHeight(0, rowHeight)
    # resize the pixmap label
    item = self.table.cellWidget(0, column)
    label = pixArray[column]
    pic = label.pixmap()
    # at this point I am actually scaling the original pixmap, how to create a copy?
    item.setPixmap(pic.scaled(rowWidth, rowHeight))
4

0 回答 0