我有以下代码,它可以完成我想要绘制一个上面有一些棋子的棋盘的(第一部分)。
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) 我正在尝试旋转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)