相关疑难解决方法(0)

AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

我有以下代码,它可以完成我想要绘制一个上面有一些棋子的棋盘的(第一部分)。

              Image pieceImage = getImage(currentPiece);
              int pieceHeight = pieceImage.getHeight(null);
              double scale = (double)side/(double)pieceHeight;
              AffineTransform transform = new AffineTransform();
              transform.setToTranslation(xPos, yPos);
              transform.scale(scale, scale);
              realGraphics.drawImage(pieceImage, transform, this);
Run Code Online (Sandbox Code Playgroud)

也就是说,它获取棋子的图像和图像的高度,将该图像的绘图转换为棋子所在的正方形,并将图像缩放到正方形的大小。

假设我想将黑色块旋转 180 度。我希望在某个地方有类似的东西:

transform.rotate(Math.toRadians(180) /* ?, ? */);
Run Code Online (Sandbox Code Playgroud)

但我不知道要输入什么作为 X 和 Y。如果我什么都不输入,图像会很好地围绕棋盘方格的 0,0 点旋转,将棋子倒置在方格的东北方。应该是这样。我猜测过 x,y 的各种其他组合,但还没有运气。

我已经在使用翻译将片段放在正确的正方形中,旋转变换需要另一个 x,y 来围绕它旋转事物,但我不知道如何告诉变换将片段围绕一个 x,y 旋转并写入图像到不同的 x,y。有人可以帮助我设置旋转参数,或者向我指出一些可以解释这些东西如何工作的东西吗?我发现了一些无法解释它们如何工作的例子,到目前为止我还没有弄清楚如何根据我的情况改变它们......


主要编辑:添加工作代码。抱歉,我不知道如何发布图片,请替换为您自己的图片。

当我运行以下命令时,我得到一个 2x2 的棋盘,左上角有一个车,右下角有一个马。

如果我进入 SmallChessboardComponent 并从第一个旋转变换语句中去掉注释分隔符,我会将车颠倒在原来的位置,并且马不会出现。如果我注释分隔符从第二个转换语句中删除,则任何一个片段都不会出现。

我正在寻找一种方法,将这些碎片翻转到它们无论如何都会出现的正方形上。我想把每一块都画到板上;我不想要翻转棋盘的代码。

主要程序:

package main;

import java.awt.BorderLayout;

import javax.swing.JFrame;

import directredraw.SmallChessboardComponent;

public class SmallChessboardMain
{
  private static void dbg (String message) { System.out.println(message); } …
Run Code Online (Sandbox Code Playgroud)

java graphics awt image-rotation affinetransform

2
推荐指数
1
解决办法
1万
查看次数

在JPanel中旋转BufferedImage

我正在尝试旋转BufferedImage并在一个内部显示它(在a JLabel里面JPanel).当前结果产生一个相对于黑色背景旋转10度的白色正方形,但图像不在正方形内.我知道myPicture不是空白,因为myPicture它本身JPanel在未旋转时正确显示.

这是代码:

int w = myPicture.getWidth();    

int h = myPicture.getHeight();  

BufferedImage newImage = new BufferedImage(w, h, myPicture.getType());

Graphics2D graphic = newImage.createGraphics();

graphic.rotate(Math.toRadians(10), w/2, h/2);

graphic.drawImage(myPicture, null, 0, 0);

picLabel.setIcon(new ImageIcon(newImage));
Run Code Online (Sandbox Code Playgroud)

java swing bufferedimage rotation jpanel

1
推荐指数
1
解决办法
5547
查看次数