さまざまな寸法のドキュメント画像があり、次の方法で効率的にスケーリングおよび回転できるようにしたいと考えています (標準の「回転」および「ズーム」ロジック)。どうすればいいのですか?
画像の高さは H ピクセル、幅は W ピクセルです。最初は、幅 600 ピクセルにスケーリングする必要があります。回転するたびに、パネルの幅と高さが入れ替わり、スケーリングされた画像が 90 度回転するはずです。ズームごとに、画像は係数「スケール」で拡大縮小する必要があります。
これが私がこれまでに試したことBufferedImage img
です...結果のBufferedImageはスケーリングおよび回転しますが、移動しません(90度回転した後、パネルの上に中央に配置されます):
double scale = zoom * 600.0 / img.getWidth();
rotation = (rotation + degrees) % 360;
int scaledWidth = (int)(scale * img.getWidth());
int scaledHeight = (int)(scale * img.getHeight());
BufferedImage bufferedImage = new BufferedImage(scaledWidth, scaledHeight, img.getType());
if (rotation % 180 == 0)
bufferedImage = new BufferedImage(scaledWidth, scaledHeight, img.getType());
else
bufferedImage = new BufferedImage(scaledHeight, scaledWidth, img.getType());
AffineTransform transform = AffineTransform.getRotateInstance(Math.toRadians(rotation), scaledWidth/2, scaledHeight/2);
transform.scale(scale, scale);
AffineTransformOp operation = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
scaledImage = operation.filter(img, bufferedImage);
imagePanel.setPreferredSize(new Dimension(bufferedImage.getWidth(), bufferedImage.getHeight()));