gpt4 book ai didi

python - 如何使用QPainter高效绘制图像?

转载 作者:行者123 更新时间:2023-11-28 18:27:15 31 4
gpt4 key购买 nike

我想在 QLabel 上绘制一个定制的 Pixmap。我必须在一个圆圈中显示图像,并且小部件在鼠标悬停时有动画(例如,轮廓颜色突出显示和属性动画)。我尝试在小部件的 paintEvent 中绘制整个图像。但是性能下降率是相当 Not Acceptable 。所以我已经制作了图像缓存并在绘画事件中设置了像素图,但是图像被像素化了。我究竟做错了什么? paintEvent 中的相同函数绘制高质量图像。

这就是我缓存像素图的方式

def fancyDraw(self, outlinePen):
hasValidImage = self._validateImage(self.image)
option = qg.QStyleOption()
option.initFrom(self)

x = option.rect.x()
y = option.rect.y()
width = option.rect.width() * self.radius
if not hasValidImage and self.shortName:
srcImage = qg.QPixmap(200, 200)
srcImage.fill(qc.Qt.transparent)
painter = qg.QPainter(srcImage)
# painter.begin()
painter.setRenderHint(qg.QPainter.Antialiasing)
painter.setBrush(self._brushText)
painter.setPen(self._penClear)
text_path = qg.QPainterPath()
text_width = self.font_metrics.width(self.shortName)
text_height = self.font().pointSize()
text_path.addText((200 - text_width) / 2,
(200 - ((200 - text_height)) / 2) - 1,
self.font(), self.shortName)
painter.drawPath(text_path)
painter.end()
else:
srcImage = qg.QPixmap(qc.QString(self.image))
if srcImage.isNull():
logger.error("Failed to load image %s" % self.image)
resizedImage = srcImage.scaled(self.width(), self.height(),
qc.Qt.KeepAspectRatio,
qc.Qt.SmoothTransformation)
pixmap = qg.QPixmap(width, width)
pixmap.fill(qg.QColor("transparent"))
imgPainter = qg.QPainter(pixmap)
imgPainter.setRenderHint(qg.QPainter.Antialiasing)
clip = qg.QPainterPath()
clip.addEllipse(x + 1, y + 1, width - 2, width - 2)
imgPainter.setClipPath(clip)
imgPainter.drawPixmap(0, 0, width, width, resizedImage)
imgPainter.end()
painter = qg.QPainter(pixmap)
painter.setRenderHint(qg.QPainter.Antialiasing)
painter.setPen(outlinePen)
painter.drawEllipse(x + 1, y + 1, width - 2, width - 2)
painter.end()
return pixmap

这就是我在 painter 中设置像素图的方式

self.normalPaint = self.fancyDraw(self._penBorder)
self.hoverPaint = self.fancyDraw(self._penBorder)
def paintEvent(self, event):
painter = qg.QPainter(self)
painter.drawPixmap(qc.QRect(self.x(), self.y(), self.width(), self.width()),
self.normalPaint)

我不是专业开发人员,只是自学。这是我在 stackoverflow 中的第一个问题。抱歉,如果出现严重错误。谢谢。

最佳答案

这就是问题所在,

resizedImage = srcImage.scaled(self.width(), self.height(),
qc.Qt.KeepAspectRatio,
qc.Qt.SmoothTransformation)

无需调整图像大小。这使它像素化!提供全尺寸图像解决了这个问题。

关于python - 如何使用QPainter高效绘制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478317/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com