试图理解这个AffineTransform代码来翻转y中的图像

时间:2014-04-18 18:27:12

标签: bufferedimage flip affinetransform

我需要翻转一个BufferedImage,我找到了这个代码来实现它:

     // Flip the image vertically
      AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
      tx.translate(0, -bufImage.getHeight(null));
      AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
      bufImage = op.filter(bufImage, null);

试着理解它我读了文档但是对我来说不清楚,为什么必须这行tx.translate(0,-bufImage.getHeight(null));

有人可以用简单的方式向我解释这几行吗?

1 个答案:

答案 0 :(得分:0)

当使用缩放因子变换缓冲图像时,点在原点周围翻转,因此(1,5)将变为(1,-5),需要平移以将图像数据移回原始图像数据它会占用的矩形。例如,假设图像从(0,0)到(10,10)运行,在翻转之后我们有一个从(0,-10)到(10,0)的矩形,我们想要将该矩形移回通过将其移动10来进入原来的位置。

当调用.translate()方法时,结果矩阵是OriginalMatrix * TranslationMatrix,因此翻译也会被翻转修改。