diff --git a/src/gui/imgview.py b/src/gui/imgview.py --- a/src/gui/imgview.py +++ b/src/gui/imgview.py @@ -5,6 +5,7 @@ from PIL import ImageTk import config from .resizablecanvas import ResizableCanvas from corners import Corners +from epoint import EPoint from grid import Grid import imageanalyzer @@ -19,7 +20,6 @@ class ImgView(ResizableCanvas): self._img=None self._tkImg=None - self._imgSizeCoef=1 self.configure(width=480,height=360) self.bind('<1>',lambda e: self.addCorner(e.x,e.y)) @@ -54,25 +54,17 @@ class ImgView(ResizableCanvas): self.create_rectangle(r1,c1,r2,c2,outline="#00ffff") def setImg(self,img): - w=int(self._width) - h=int(self._height) - wo,ho=img.size # o for original - widthRatio=wo/w - heightRatio=ho/h - self._imgSizeCoef=max(widthRatio,heightRatio) - self._img=img ## Stores a grid corner located at x,y coordinates. def addCorner(self,x,y): self._corners.add(x,y) log.debug("click on %d,%d",x,y) - log.debug("sizeCoef: %f",self._imgSizeCoef) if self._corners.canonizeOrder(): # transform corners from show coordinates to real coordinates log.debug(self._corners.corners) self._boardGrid=Grid(self._corners.corners) - corners=[(c*self._imgSizeCoef) for c in self._corners.corners] + corners=[self._transformPoint(c) for c in self._corners.corners] self._parent.sendMsg("setCorners",(corners,)) self.redraw() @@ -86,5 +78,17 @@ class ImgView(ResizableCanvas): w=self._width super()._onResize(event) self._corners.scale(self._width/w) - self._boardGrid=Grid(self._corners.corners) + if len(self._corners.corners)==4: + self._boardGrid=Grid(self._corners.corners) self.redraw() + + def _transformPoint(self,point): + w=int(self._width) + h=int(self._height) + wo,ho=self._img.size # o for original + widthRatio=wo/w + heightRatio=ho/h + self._imgSizeCoef=max(widthRatio,heightRatio) + # shift compensates possible horizontal or vertical empty margins from unmatching aspect ratios + self._imgShift=EPoint(wo-w*self._imgSizeCoef,ho-h*self._imgSizeCoef)/2 + return EPoint(self.canvasx(point.x),self.canvasy(point.y)) * self._imgSizeCoef + self._imgShift