19 java swing bufferedimage rotation graphics2d
我无法轮流BufferedImage显示.我认为旋转工作正常,但我实际上无法将其绘制到屏幕上.我的代码:
Class extends JPanel {
    BufferedImage img;
    int rotation = 0;
    public void paintComponent(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        img2d = img.createGraphics();
        img2d.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
        g.drawImage(img, imgx, imgy, null);
        this.repaint();
    }
}
这不适合我.我找不到任何方式绘制旋转img2d到g.
编辑:我有多个被绘制的对象g,所以我不能旋转它.我需要能够单独旋转东西.
Har*_*Joy 34
也许你应该尝试这样使用AffineTransform:
    AffineTransform transform = new AffineTransform();
    transform.rotate(radians, bufferedImage.getWidth()/2, bufferedImage.getHeight()/2);
    AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
    bufferedImage = op.filter(bufferedImage, null);
希望这可以帮助.
dac*_*cwe 19
我会使用Graphics2D.drawImage(image,affinetranform,imageobserver).
下面的代码示例将图像旋转并转换为组件的中心.这是结果的屏幕截图:

 public static void main(String[] args) throws IOException {
    JFrame frame = new JFrame("Test");
    frame.add(new JComponent() {
         BufferedImage image = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
         @Override
         protected void paintComponent(Graphics g) {
              super.paintComponent(g);
              // create the transform, note that the transformations happen
              // in reversed order (so check them backwards)
              AffineTransform at = new AffineTransform();
              // 4. translate it to the center of the component
              at.translate(getWidth() / 2, getHeight() / 2);
              // 3. do the actual rotation
              at.rotate(Math.PI/4);
              // 2. just a scale because this image is big
              at.scale(0.5, 0.5);
              // 1. translate the object so that you rotate it around the 
              //    center (easier :))
              at.translate(-image.getWidth()/2, -image.getHeight()/2);
              // draw the image
              Graphics2D g2d = (Graphics2D) g;
              g2d.drawImage(image, at, null);
              // continue drawing other stuff (non-transformed)
              //...
         }
    });
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 400);
    frame.setVisible(true);
}
您正在旋转用于绘制到图像中的图形,而不是图像。这就是为什么你看不到效果。将旋转应用于您正在绘制的图形,它将绘制旋转的图像:
public void paintComponent(Graphics g) {
    g.clearRect(0, 0, getWidth(), getHeight());
    g.rotate(Math.toRadians(rotation), img.getWidth() / 2, img.getHeight() / 2);
    g.drawImage(img, imgx, imgy, null);
    this.repaint();
}
这可能不会完全按照您的预期绘制,旋转将围绕坐标原点旋转。对于要围绕其中心旋转的图像,您需要在旋转之前应用坐标平移,例如:
g.translate(imgx >> 1, imgy >> 1);
该Graphics2D的教程有一些更多的例子。