10

画像を回転させようとしています。私はこのJavaコードを使用しています:

BufferedImage oldImage = ImageIO.read(new FileInputStream("C:\\workspace\\test\\src\\10.JPG"));
BufferedImage newImage = new BufferedImage(oldImage.getHeight(), oldImage.getWidth(), oldImage.getType());
Graphics2D graphics = (Graphics2D) newImage.getGraphics();
graphics.rotate(Math.toRadians(90), newImage.getWidth() / 2, newImage.getHeight() / 2);
graphics.drawImage(oldImage, 0, 0, oldImage.getWidth(), oldImage.getHeight(), null);
ImageIO.write(newImage, "JPG", new FileOutputStream("C:\\workspace\\test\\src\\10_.JPG"));

しかし、奇妙な結果が表示されます:

ソース:

**ソース画像:**

結果:

**結果画像:**

この問題について教えてください。

4

4 に答える 4

14

画像の幅と高さを切り替えるだけでは不十分です。画像の中心を回転の原点として使用して回転しています。一枚の紙で同じことを試してみると、同じように機能することがわかります。また、紙を少し動かす必要があります。これは、これを修正するために変換を適用することを意味します。したがって、ローテーション呼び出しの直後に、次のようにします。

  graphics.translate((newImage.getWidth() - oldImage.getWidth()) / 2, (newImage.getHeight() - oldImage.getHeight()) / 2);
于 2012-08-28T19:29:49.930 に答える
0

描画を行うパネルの境界を取得してみてください

Rectangle rect = this.getBounds();

そして、次のことを行います。

graphics.rotate(Math.toRadians(90), (rect.width - newImage.getWidth()) / 2, (rect.height - newImage.getHeight()) / 2);

それが乾杯に役立つことを願っています!

于 2012-08-28T19:29:02.420 に答える
0

回転のため、新しい画像のサイズは異なります。これを試してください: BufferedImage newImage = new BufferedImage( oldImage.getWidth(),oldImage.getHeight(),oldImage.getType());

于 2012-08-28T19:25:04.003 に答える
0

このように書くことができます。

BufferedImage newImage = new BufferedImage(oldImage.getWidth(), oldImage.getHeight(), oldImage.getType());

widthコードのandの場所heightが間違っていると思います。

于 2013-02-18T18:16:51.023 に答える