如何在此旋转变换后翻译图像

时间:2016-04-07 00:16:18

标签: java graphics2d

下面这段代码是我用于绘制图像对象的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);
            }
        }

1 个答案:

答案 0 :(得分:0)

我的感觉是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);

当然,如果你翻译了一段时间,那将会减少。