Java 如何在此旋转变换后平移图像

Java 如何在此旋转变换后平移图像,java,graphics2d,Java,Graphics2d,下面的代码是用于绘制图像对象的paintComponent,但我希望能够旋转图像而不将其围绕中心向外移动,但也可以根据特定值进行平移 trans.translate(xShift, yShift); 这是我试图用来翻译我的图像的一条线,但由于某种原因,它每次都会切断图像的一部分 protected void paintComponent(Graphics g) { super.paintComponent(g); if

下面的代码是用于绘制图像对象的paintComponent,但我希望能够旋转图像而不将其围绕中心向外移动,但也可以根据特定值进行平移

            trans.translate(xShift, yShift);
这是我试图用来翻译我的图像的一条线,但由于某种原因,它每次都会切断图像的一部分

  protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (myImage != null) {
                AffineTransform trans = new AffineTransform();
                trans.translate(getWidth() / 2, getHeight() / 2);
                trans.rotate(piece.getOrientation() * Math.PI / 2);
                trans.translate(-myImage.getWidth() / 2, -myImage.getHeight() / 2);
                trans.translate(xShift, yShift);
                Graphics2D g2d = (Graphics2D) g;
                g2d.drawImage(myImage, trans, null);
            }
        }

我的感觉是java在复合转换方面存在问题

也许您可以找到另一种方法:例如,变换图像本身,然后应用简单的翻译:

    BufferedImage b22=new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2=(Graphics2D)b22.getGraphics();
    AffineTransform trans = new AffineTransform();
    trans.translate(getWidth() / 2, getHeight() / 2);
    trans.rotate(Math.PI / 2);
    trans.translate(-bim.getWidth() / 2, -bim.getHeight() / 2);
    g2.drawImage(bim, trans, null);
    AffineTransform trans2 = new AffineTransform();
    trans2.translate(xoffset, yoffset);
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(b22, trans2, null);
    // or just g2d.drawImage(b22, xoffset, yoffset, null);
当然,如果你把它翻译成某种程度,它会被切掉的