PyQt Pixmap缩放,以后保持分辨率

时间:2017-03-26 08:20:08

标签: python pyqt pixmap

我在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))

0 个答案:

没有答案