旋转图像对象 [英] Rotating an Image object

查看:24
本文介绍了旋转图像对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个方法 getImage() 需要旋转一个 Image,将它存储在一个新变量中,然后返回那个新的 Image.这是我的尝试,图像似乎是空的或什么的.它只是没有显示在屏幕上:

I have a method getImage() that needs to rotate an Image, store it in a new variable, then return that new Image. Here is my attempt, the image appears to be empty or something. It just does not show up on the screen:

public Image getImage() {
    buffImage.createGraphics().rotate(direction);
    return buffImage;
}

当我取出 buffImage.createGraphics().rotate(direction); 图像在屏幕上绘制得很好,没有问题,但当然没有旋转.

When I take out the buffImage.createGraphics().rotate(direction); the image draws on the screen just fine with no problems but of course, not rotated.

推荐答案

所以,基于 这个答案,您应该能够设计一种旋转方法,该方法可以将源图像旋转给定的度数,例如...

So, based on the example in this answer, you should be able to devise a rotation method which can rotate a source image by a given number of degrees, for example...

  // Make sure you actually load some image and assign it to this
  // variable, otherwise you will have a NullPointerException to 
  // deal with
  private BufferedImage source;

  public Image rotateBy(double degrees) {

    // The size of the original image
    int w = source.getWidth();
    int h = source.getHeight();
    // The angel of the rotation in radians
    double rads = Math.toRadians(degrees);
    // Some nice math which demonstrates I have no idea what I'm talking about
    // Okay, this calculates the amount of space the image will need in
    // order not be clipped when it's rotated
    double sin = Math.abs(Math.sin(rads));
    double cos = Math.abs(Math.cos(rads));
    int newWidth = (int) Math.floor(w * cos + h * sin);
    int newHeight = (int) Math.floor(h * cos + w * sin);

    // A new image, into which the original can be painted
    BufferedImage rotated = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = rotated.createGraphics();
    // The transformation which will be used to actually rotate the image
    // The translation, actually makes sure that the image is positioned onto
    // the viewable area of the image
    AffineTransform at = new AffineTransform();
    at.translate((newWidth - w) / 2, (newHeight - h) / 2);

    // And we rotate about the center of the image...
    int x = w / 2;
    int y = h / 2;
    at.rotate(rads, x, y);
    g2d.setTransform(at);
    // And we paint the original image onto the new image
    g2d.drawImage(source, 0, 0, null);
    g2d.dispose();

    return rotated;
  }

这篇关于旋转图像对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆