效果
效果演示是设置QImage1与QImage2的透明度均为0.5(0为完全透明,1为不透明),叠加在一起的图片
实现
以下代码实现在QLabel上展现QImage1与QImage2的透明过渡渐变效果(falg为方向控制,
falg=False时,由leave图像渐变到enter图像
falg=True时,由enter图像渐变到leave图像)
def img_gradient(self,flag)
size=self.me_size
leave=self.image_leave.scaled(size,Qt.KeepAspectRatioByExpanding,Qt.SmoothTransformation)
enter=self.image_enter.scaled(size,Qt.KeepAspectRatioByExpanding,Qt.SmoothTransformation)
image=QImage(size,QImage.Format.Format_ARGB32)
painter=QPainter(image)
for i in range(101):
image.fill(Qt.transparent)
painter.setOpacity(((100+flag+i*(flag*2-1))%101)*0.01)
painter.drawImage(0,0,leave)
painter.setOpacity(((101-flag+i*(1-flag*2))%101)*0.01)
painter.drawImage(0,0,enter)
self.setPixmap(QPixmap(image))
self.repaint()
painter.end()
杂谈
网络上有许多调用painter.setCompositionMode(mode)
的方法来实现图像混合
关于两个ARGB的颜色如何叠加,知乎上的一篇文章介绍的很好
实际上,对于普通的颜色叠加,也就是图中Normal的效果,在QPainter中同一位置绘制两张图片就好了
而如果想要正片叠底(multiply)
则需要先
painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_Multiply)
而QPainter.CompositionMode.CompositionMode_DestinationIn
之类的模式则是设置图片之间有覆盖时的处理方式,详细内容参考这篇文章
结语
如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞。