scintilla 始める前に version 2

2019/07/04 17:09 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
code
```
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QPointF , QPoint ,QRectF ,Qt
from PyQt5.QtGui import QPainterPath ,QPainter ,QPen
from scipy import interpolate

from PIL import Image
import numpy

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.setWindowTitle('hogetta')
        self.setGeometry( 500, 50 , 500 , 500 )
        # self.x=[0,128,255]  # to use scipy function
        # self.y=[0,128,255]
        self.x=[0,170,255]  # to use scipy function
        self.y=[255,170,0]
        # self.x=[0,1.25,2.55]  # to use scipy function
        # self.y=[0,1.7,2.55]
        self.f_list=[]      # look up table ( curve )
        for l in range(256):
            self.f_list.append(QPoint( l , 255-l))   # make initial table --> line
        self.a = QPoint(4,4) # Tolerance in detecting point
        self.pselected = -1             # selectedpoint
        self.pmove = 0                  # move flag
        self.show()

    def mouseMoveEvent(self ,e):
        if self.pmove :  # Dorag ing
            # self.list[1] = e.pos()    # 1 only now
            self.x[1] = e.pos().x()
            self.y[1] = e.pos().y()
            self.makeLUT()
            self.update()

    def mousePressEvent(self ,e):
        self.pmove = True
    def mouseReleaseEvent(self ,e):
        self.pmove = False
        self.showimg()

    def makeLUT(self): # make look up table by function
        # linear quadratic × cubic
        func = interpolate.interp1d(self.x, self.y, kind="quadratic" ) 
        for l in range(256):
            value=int(func(l))
            value = value if value >=0 else 0 
            self.f_list[l] = QPoint( l , value )

    def paintEvent (self,e):

        painter= QPainter()
        painter.begin(self) 
        painter.setPen( QPen( Qt.black , 2, style=Qt.SolidLine ) )
        for l in range( 255 ):
            painter.drawPoint( self.f_list[l] )
        painter.setPen( QPen( Qt.red , 8, style=Qt.SolidLine ) )
        painter.drawPoint( self.x[1] ,  self.y[1] )
        painter.end() 

    def showimg(self):
        im = Image.open(r"e:\Programs\python\qt\pil\image.jpg")
        rgb_im = im.convert('RGB')
        size = rgb_im.size
        im2 = Image.new('RGBA',size)

        # array = numpy.asarray(im) # 
        # print(array)
        # array = int(self.f_list[ int(array) ].y())
        # res = Image.fromarray(numpy.uint8(array))
        # res.sohw()
        # return

        data = im.getdata()
        data2=[]
        width, height = im.size
        for l in range( width * height ):
            r,g,b = data[l]
            r = 255-self.f_list[r].y()  # <<===
            g = 255-self.f_list[g].y()  # <<===
            b = 255-self.f_list[b].y()  # <<===
            data2.append((r,g,b,0))   #  <======== tupple!!!!!!
        im2.putdata(data2)
        im2.show()
        return


        # getpixel 遅い
        for x in range(size[0]):
            for y in range(size[1]):
                r,g,b = rgb_im.getpixel((x,y))
                # print(r,g,b)
                r = int(self.f_list[r].y())
                g = int(self.f_list[g].y())
                b = int(self.f_list[b].y())

                im2.putpixel((x,y),(r,g,b,0))

        im2.show()



if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
```
      
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QPointF , QPoint ,QRectF ,Qt
from PyQt5.QtGui import QPainterPath ,QPainter ,QPen
from scipy import interpolate

from PIL import Image
import numpy

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.setWindowTitle('hogetta')
        self.setGeometry( 500, 50 , 500 , 500 )
        self.x=[0,170,255]  # to use scipy function
        self.y=[255,170,0]
        self.f_list=[]      # look up table ( curve )
        for l in range(256):
            self.f_list.append(QPoint( l , 255-l))   # make initial table --> line
        self.a = QPoint(4,4) # Tolerance in detecting point
        self.pselected = -1             # selectedpoint
        self.pmove = 0                  # move flag
        self.show()

    def mouseMoveEvent(self ,e):
        if self.pmove :  # Dorag ing
            self.x[1] = e.pos().x()
            self.y[1] = e.pos().y()
            self.makeLUT()
            self.update()

    def mousePressEvent(self ,e):
        self.pmove = True
    def mouseReleaseEvent(self ,e):
        self.pmove = False
        self.showimg()

    def makeLUT(self): # make look up table by function
        # linear quadratic × cubic
        func = interpolate.interp1d(self.x, self.y, kind="quadratic" ) 
        for l in range(256):
            value=int(func(l))
            value = value if value >=0 else 0 
            self.f_list[l] = QPoint( l , value )

    def paintEvent (self,e):
        painter= QPainter()
        painter.begin(self) 
        painter.setPen( QPen( Qt.black , 2, style=Qt.SolidLine ) )
        for l in range( 255 ):
            painter.drawPoint( self.f_list[l] )
        painter.setPen( QPen( Qt.red , 8, style=Qt.SolidLine ) )
        painter.drawPoint( self.x[1] ,  self.y[1] )
        painter.end() 

    def showimg(self):
        im = Image.open(r"e:\Programs\python\qt\pil\image.jpg")
        rgb_im = im.convert('RGB')
        size = rgb_im.size
        im2 = Image.new('RGBA',size)

        data = im.getdata()
        data2=[]
        width, height = im.size
        for l in range( width * height ):
            r,g,b = data[l]
            r = 255-self.f_list[r].y()  # <<===
            g = 255-self.f_list[g].y()  # <<===
            b = 255-self.f_list[b].y()  # <<===
            data2.append((r,g,b,0))   #  <======== tupple!!!!!!
        im2.putdata(data2)
        im2.show()
        return

        # getpixel 遅い
        for x in range(size[0]):
            for y in range(size[1]):
                r,g,b = rgb_im.getpixel((x,y))
                # print(r,g,b)
                r = int(self.f_list[r].y())
                g = int(self.f_list[g].y())
                b = int(self.f_list[b].y())

                im2.putpixel((x,y),(r,g,b,0))

        im2.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())