Beispiel #1
0
class Assert:
    
    def __init__(self):
        self.equal = True
        self.images = {}
        self.result = {}
        self.area1 = Area(5,5,200,200,"Your Area")
        self.area2 = Area(5,210,200,200,"Correct")
        self.area3 = Area(5,415,200,200,"Difference")

    def check(self,filename): # missing ext
        if self.equal == True:
            self.filename = filename
            if filename in self.images:
                img = self.images[filename]
            else:
                img = loadImage(filename + EXT)
            a = self.area2
            if img == None:
                fill(204)
                #noStroke()
                stroke(0)
                rect(a.x,a.y,a.w,a.h)
            else: 
                self.images[filename] = img
                image(img, a.x, a.y)
                
        fill(204)
        stroke(0)
        strokeWeight(1)
        rect(225,100,150,50)   
        fill(0)
        if 5 < mouseX < 205 and (mouseY-5) % 205 < 200 :
            textSize(16)
            textAlign(CENTER,BOTTOM)
            text("x="+str(mouseX-5),300,125)
            text("y="+str((mouseY-5)%205),300,145)
                
        return self
        
    def __enter__(self):
        return self
    
    def __exit__(self, type, value, tb):
        if self.filename not in self.result:
            count = self.compare()
            resetMatrix()
            rectMode(CORNER)
            fill(255)
            stroke(255)
            textAlign(CENTER,BOTTOM)
            textSize(16)
            fill(204)
            strokeWeight(1)
            rect(225,300,150,50)
            rect(225,500,150,50)
            fill(0)
            text(self.filename,300,335)
            if count==0:
                fill(0,128,0)
            else:
                fill(255,0,0)
            text(str(count) + " pixel errors",300,535)
            self.result[self.filename] = count==0
        else:
            resetMatrix()
            rectMode(CORNER)
        
    def split(self,c):
        r = c & 0xFF 
        c = c >> 8; g = c & 0xFF 
        c = c >> 8; b = c & 0xFF
        return [r,g,b]
    
    def compare(self):
        count = 0
        
        img1 = self.area1.myget()
        img2 = self.area2.myget()
        img3 = self.area3.myget()
        
        for i in range(200):
            for j in range(200):
                r1,g1,b1 = self.split(img1.get(i,j))
                r2,g2,b2 = self.split(img2.get(i,j))
                c = color(r1^r2, g1^g2, b1^b2)
                img3.set(i,j,c) 
                if c != color(0): count += 1
        self.area3.myset(img3)        
        self.equal = count==0
        if self.equal == False: self.filename2 = self.filename
        if count > 0: print count,self.filename2
        return count
   
    def ok(self):
        if self.equal: 
            self.area1.coords()
            translate(self.area1.x,self.area1.y)
            #self.area2.coords()
            #self.area3.coords()
        return self.equal
    
    def keyPressed(self):
        if key == "!": 
            self.area1.save(self.filename2 + EXT)!

            
Beispiel #2
0
class Assert:
    def __init__(self):
        self.images = {}
        self.result = {}
        self.area1 = Area(GAP, GAP, WIDTH, HEIGHT)
        self.area2 = Area(GAP, 1 * (GAP + HEIGHT + 1) + GAP, WIDTH, HEIGHT)
        self.area3 = Area(GAP, 2 * (GAP + HEIGHT + 1) + GAP, WIDTH, HEIGHT)
        self.area4 = Area(GAP + WIDTH + GAP, 2 * (GAP + HEIGHT + 1) + GAP,
                          WIDTH, HEIGHT)
        self.area5 = Area(GAP + WIDTH + GAP, 1 * (GAP + HEIGHT + 1) + GAP,
                          WIDTH, HEIGHT)
        self.count = 0
        self.mousex = 0
        self.mousey = 0
        self.img2 = None
        self.img3 = None
        self.img4 = None
        self.nr = 0

    def check(self, filename):  # missing ext
        if self.count == 0:
            background(255)
            self.filename = filename
            if filename in self.images:
                self.img2 = self.images[filename]
            else:
                self.img2 = loadImage(filename + EXT)
            a = self.area2
            if self.img2 == None:
                fill(BACKGR)
                strokeWeight(1)
                stroke(0)
                rect(a.x, a.y, a.w + 1, a.h + 1)
            else:
                self.images[filename] = self.img2
                image(self.img2, a.x, a.y)

        if self.img3:
            self.area3.myset(self.img3)

        self.showText()

        return self

    def __enter__(self):
        return self

    def __exit__(self, type, value, tb):
        if self.filename not in self.result:
            self.nr += 1
            count = self.compare()
            self.result[self.filename] = count == 0
            print(
                str(self.nr) + " " + self.filename + " " + str(millis()) +
                " ms")
        resetMatrix()
        rectMode(CORNER)
        colorMode(RGB, 255, 255, 255, 255)
        textAlign(LEFT, BOTTOM)

    def showOneColor(self, color, value, y):
        fill(color)
        textAlign(RIGHT, BOTTOM)
        text("{0:3d}".format(value), GAP + 3 * WIDTH / 2 - 10, y)
        textAlign(LEFT, BOTTOM)
        text("{0:.3f}".format(value / 255.0), GAP + 3 * WIDTH / 2 + 10, y)

    def showText(self):
        self.area4.clear(255)
        textAlign(CENTER, BOTTOM)
        textSize(16)
        strokeWeight(1)
        fill(0)
        text(self.filename, 3 * WIDTH / 2, 440)

        mghg = (self.mousey - GAP) % (HEIGHT + 1 + GAP)
        if 0 <= self.mousex - GAP <= WIDTH and mghg <= HEIGHT and self.mousey < 3 * 180 + 4 * GAP:
            s = "x,y = " + str(self.mousex - GAP) + "," + str(mghg)
            #text(s,GAP+3*WIDTH/2,460)

        if self.count == 0: fill(0, 128, 0)
        else: fill(255, 0, 0)
        text(str(self.count) + " pixel errors", GAP + 3 * WIDTH / 2, 480)

        #pixel = self.img2.get(self.mousex-GAP, mghg)
        pixel = get(self.mousex, self.mousey)

        r, g, b = self.split(pixel)
        self.showOneColor(color(255, 0, 0), r, 520)
        self.showOneColor(color(0, 255, 0), g, 540)
        self.showOneColor(color(0, 0, 255), b, 560)

    def split(self, c):
        b = c & 0xFF
        c = c >> 8
        g = c & 0xFF
        c = c >> 8
        r = c & 0xFF
        return [r, g, b]

    def compare(self):
        self.count = 0

        img1 = self.area1.myget()
        img2 = self.area2.myget()
        self.img3 = self.area3.myget()

        for i in range(WIDTH + 1):
            for j in range(HEIGHT + 1):
                r1, g1, b1 = self.split(img1.get(i, j))
                r2, g2, b2 = self.split(img2.get(i, j))
                r, g, b = abs(r1 - r2), abs(g1 - g2), abs(
                    b1 - b2)  # somewhat nicer diff
                c = color(r, g, b)
                self.img3.set(i, j, c)
                if r + g + b > 9:  # t ex whiteTriangle i motsatt riktning
                    self.count += 1
                    if self.count < 10: print i, j, ":", r, g, b
        self.area3.myset(self.img3)
        if self.count > 0:
            self.filename2 = self.filename
            print self.filename2, ":", self.count, "errors in", str(
                millis()) + " millis"
        return self.count

    def errors(self):
        if self.count == 0:
            self.area1.coords()
            translate(self.area1.x, self.area1.y)
        return self.count != 0

    def keyPressed(self):
        if key == "!":
            self.area1.save(self.filename + EXT)

    def mousePressed(self):
        self.mousex = mouseX
        self.mousey = mouseY

    def mouseMoved(self):
        loadPixels()
        #n,m = 3,20
        n, m = 5, 12

        x0, y0 = GAP, HEIGHT
        x1, y1 = 3 * GAP + 100 + WIDTH, 110 + HEIGHT
        for dx in range(-m, m):
            x = mouseX + dx
            for dy in range(-m, m):
                y = mouseY + dy
                if x + width * y >= width * height: return
                pixel = pixels[x + width * y]
                for i in range(n):
                    xi = x1 + n * dx + i - 2
                    for j in range(n):
                        yi = y1 + n * dy + j - 1
                        pixels[xi + width * yi] = pixel
        updatePixels()
        stroke(255)
        strokeWeight(1)
        x1 = x1 - 1 + 1
        y1 = y1 + 1
        line(x1, y1 - 100, x1, y1 + 100)
        line(x1 - 100, y1, x1 + 100, y1)