改写linux窗口程序设计的Qt例子(6)

首先声明,如果转载请声明作者以及来源

第三十七例子 改变图片的透明度
首先,书上的很多列子,代码没有给全,有些代码片段是我自己加的。。。我水平不是很高,如果,有些代码加的不是合适,恳请各位大神指点!
另外,关于注释的话,书上都讲的很清楚了,我这里没有必要画蛇添足了。如果,实在有不懂的地方,麻烦告诉我,如果我懂的话,我会告诉你!
代码如下
__author__ = '375159507'
try:
    from PySide import  QtGui
    from PySide import  QtCore
except ImportError:
    from PyQt4 import  QtGui
    from PyQt4 import  QtCore

class PicTrans(QtGui.QWidget):
    def __init__(self):
        super(PicTrans,self).__init__()

        self.img = QtGui.QImage()
        self.dst = QtGui.QImage()
        self.flag = False
        self.new  = 100
        self.p = self.palette()
        self.p.setColor(QtGui.QPalette.Window,QtGui.QColor(255,255,255))
        self.setPalette(self.p)

        self.slider = QtGui.QSlider()
        self.slider.setRange(0,100)
        self.slider.setTickInterval(10)
        self.slider.setOrientation(QtCore.Qt.Horizontal)
        self.slider.setValue(100)
        self.slider.valueChanged.connect(self.slotchange)
        self.slider.sliderReleased.connect(self.slotpaint)
        self.slotchange(self.slider.value())

        self.button = QtGui.QPushButton()
        self.button.setText("打开")
        self.button.clicked.connect(self.slotopen)



        self.mylayout = QtGui.QHBoxLayout()
        self.mylayout.addStretch(1)
        self.mylayout.addWidget(self.slider)
        self.mylayout.addWidget(self.button)
        self.setLayout(self.mylayout)

    def slotopen(self):
        self.filename = QtGui.QFileDialog.getOpenFileName(self,"打开",
                                                     "D:","Images(*.png  *.jpg)")

        if self.filename:
            
            self.img = QtGui.QImage(self.filename[0])
            self.dst = self.img
            self.repaint()
            self.resize(self.img.width(),self.img.height())
            self.flag = True
        else:
            self.flag = False

    def paintEvent(self, e):
         painter = QtGui.QPainter(self)
         painter.drawImage(0,0,self.dst)

    def slotchange(self,value):
        self.new = value
    def slotpaint(self):
        bkColor = self.palette().color(QtGui.QPalette.Window)
        v = 0.01*self.new
        self.img = QtGui.QImage(self.filename[0])
        if self.flag is True:
            self.dst = self.img
            width = self.dst.width()
            height = self.dst.height()
            for i in range(0,height):
                for j in range(0,width):
                    alpha = QtGui.qAlpha(self.dst.pixel(j,i))
                    if alpha is 0:
                        red = QtGui.qRed(bkColor.rgb())
                        green = QtGui.qGreen(bkColor.rgb())
                        blue = QtGui.qBlue(bkColor.rgb())
                        self.dst.setPixel(j,i,QtGui.qRgb(red,green,blue))

                    else:

                        red = (QtGui.qRed(bkColor.rgb()))*(1-v) + (QtGui.qRed(self.img.pixel(j,i))*v)
                        green = (QtGui.qGreen(bkColor.rgb()))*(1-v) + (QtGui.qGreen(self.img.pixel(j,i))*v)
                        blue = (QtGui.qBlue((bkColor.rgb())))*(1-v) + (QtGui.qBlue(self.img.pixel(j,i))*v)
                        self.dst.setPixel(j,i,QtGui.qRgb(red,green,blue))
        self.repaint()







if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mainwindow = PicTrans()
    mainwindow.show()
    sys.exit(app.exec_())







效果图1,透明度为100%的时候:

透明度为50%的时候:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值