def test_crop(self): context = ImageTransform((640, 480)) cropped = context.crop(Rect(200, 100, 300, 200)) vector = Vector(250, 150) transformed = cropped.transform_vector(vector) self.assertEqual(transformed, Vector(50, 50)) untransformed = cropped.untransform_vector(transformed) self.assertEqual(untransformed, vector)
def test_resize(self): context = ImageTransform((640, 480)) resized = context.resize((320, 240)) vector = Vector(100, 200) transformed = resized.transform_vector(vector) self.assertEqual(transformed, Vector(50, 100)) untransformed = resized.untransform_vector(transformed) self.assertEqual(untransformed, vector)
def test_resize_then_crop(self): context = ImageTransform((640, 480)) resized = context.resize((320, 240)) cropped = resized.crop(Rect(200, 100, 300, 200)) vector = Vector(500, 300) transformed = cropped.transform_vector(vector) self.assertEqual(transformed, Vector(50, 50)) untransformed = cropped.untransform_vector(transformed) self.assertEqual(untransformed, vector)
def untransform_vector(self, vector): """ Transforms the given vector back to the coordinate space of the source image. This performs the inverse of `transform_vector`. Use this to find where a point in the final cropped/resized image originated from in the source image. Returns a new vector. """ return Vector(vector.x / self.scale[0] - self.offset[0], vector.y / self.scale[1] - self.offset[1])
def transform_vector(self, vector): """ Transforms the given vector into the coordinate space of the final image. Use this to find out where a point on the source image would end up in the final image after cropping/resizing has been performed. Returns a new vector. """ return Vector((vector.x + self.offset[0]) * self.scale[0], (vector.y + self.offset[1]) * self.scale[1])
def test_set_centroid_with_vector(self): rect = Rect(100, 150, 200, 350) rect.centroid = Vector(500, 500) self.assertEqual(rect, (450, 400, 550, 600))
def test_set_size_with_vector(self): rect = Rect(100, 150, 200, 350) rect.size = Vector(200, 400) self.assertEqual(rect, (50, 50, 250, 450))