2014-10-03 99 views
0

我面临着一些问题后进行切割。当我旋转图像时,图像在角落被切割。我正在使用下面的代码来旋转图像。它正在正确旋转,但在所有角落都被切断。图像在角落旋转

public static Image rotate(BufferedImage img, double angle) { 
    int w = img.getWidth();  
    int h = img.getHeight();  
    BufferedImage result = new BufferedImage(w, h, img.getType()); 
    Graphics2D g2 = result.createGraphics(); 
    g2.setColor(Color.WHITE); 
    g2.fillRect(0, 0, w, h); 
    g2.rotate(Math.toRadians(angle), w/2, h/2); 
    g2.drawRenderedImage(img, null); 
    //g2.drawImage(img,null,0,0); 
    return result; 
} 

我需要的东西,不会让角落被削减。请帮忙。

+0

但你想怎样呢?你想到最后'Image'为尺寸为初始一个相同的(使旋转的图像已被缩小),或者你希望绘制的图像具有(更多或更少)的初始大小为最初的一(这样'Image'实例必须比最初的那个大)? – 2014-10-03 08:05:30

+0

最终图像的尺寸应与初始尺寸相同。我的要求是图像应该旋转,但外观应该是相同的。但目前这个形象正在被削减。 – harry 2014-10-03 08:10:57

+0

首先,外观与此无关。其次,如果图像占用20乘40的组件上的所有空间,并且将图像旋转90度,则图像将会增加40乘20,这在宽度上太大,并且将被切割。您必须重新调整图像大小或确保将其绘制在足够大的组件上。 – user1803551 2014-10-03 12:37:49

回答

0

当你发现自己,result图像是旋转的情况下太小。你必须做一些数学来找到合适的大小。如果你懒得(=太聪明),给自己做数学题,创建一个Rectangle2D匹配您的原始图像,为您创造一个旋转AffineTransform,创建您的矩形变换形状,并用这种形状的边框。 (您可以将相同的变换,你Graphics为好。)

+0

我对此很陌生。你能帮我一些参考或代码片段。在此先感谢 – harry 2014-10-03 08:36:36

+0

我假设你明白*为什么*你的结果图像太小。请检查AffineTransform的javadoc,了解如何获取表示旋转的实例以及如何将其应用于形状。然后按照上面的步骤。 – 2014-10-03 08:43:54