Jim*_*mmt 7 java graphics image rotation
与上次相同的问题,但我会提供更多细节.我正在使用以下方式旋转图像:
int rotateNum //in main class
double rotationRequired = Math.toRadians(rotateNum);
double locationX = img.getWidth(this) / 2;
double locationY = img.getHeight(this) / 2;
AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
g2d.drawImage(op.filter((BufferedImage)img, null), imgX, imgY, null);
Run Code Online (Sandbox Code Playgroud)
然后我实际上使用以下方式旋转图像:
double deltaX = (double)(imgY - otherImg.imgY);
double deltaY = (double)(imgX - otherImg.imgX);
rotateNum = (int)(180 * Math.atan2(deltaY, deltaX) / Math.PI);
Run Code Online (Sandbox Code Playgroud)
我的图片大小不一.较小的图像不会被切断(意味着被白色空间切断),但较大的图像不会被切断(左侧或右侧).调整图像大小不起作用,我使用GIMP剪切图像周围的白色矩形.
示例图像:之前(忽略左侧的灰色区域)
之后:看到侧面的截止点
我认为重要的不是图像的大小,而是它的怪异程度:更方形的图像比更胖或更瘦的图像问题更少。
我认为你的问题是你的旋转中心不应该是[宽度/ 2,高度/ 2] - 这不是那么简单。相反,想象图像位于一个大正方形的左上部分,正方形边长将是图像的宽度或高度,以较大者为准。这就是每当您旋转图像时就会旋转的内容。
例如,请参阅我的回复:/sf/answers/610408641/