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)!
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)