Rotating an Image object

前端 未结 2 482
一个人的身影
一个人的身影 2020-12-12 01:35

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,

相关标签:
2条回答
  • 2020-12-12 01:54

    You could just use a Rotated Icon and display the Icon in a JLabel.

    The Rotated Icon is a reusable class so you don't need to worry about about adding the rotation code to every class where you need this functionality.

    0 讨论(0)
  • 2020-12-12 02:13

    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;
      }
    
    0 讨论(0)
提交回复
热议问题