最近在做小型游戏,遇到了要翻转图片的苦恼,经过我一下午的研究,终于发现了一种好用的方法。
部分代码来源于别人,我在这个基础上修改了下,变得更好用了,之前的别人Image输入都是BufferedImage,我改成了Image,
也就是加了一个转换
大家如果看不懂代码没关系,会用就行了,我会展示一下怎么用的
ImageRotate类
package mypackage;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
/**
* Author Mythos_Q
*
* Time 2011-07-20
*
* Description 图片旋转、翻转处理
*/
public class ImgRotate
{
static int Up_Down_Reverse = 0;
static int Left_Right_Reverse = 1;
/**
* 旋转图片为指定角度
*
* @param bufferedimage
* 目标图像
* @param degree
* 旋转角度
* @return
*/
public static BufferedImage rotateImage(final BufferedImage bufferedimage,final int degree){
int w = bufferedimage.getWidth();
int h = bufferedimage.getHeight();
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = new BufferedImage(h, w, type)).createGraphics()).setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2 + (w>h?(w-h)/2:(h-w)/2));
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.dispose();
return img;
}
/**
* 旋转图片为指定角度
*
* @param file
* 目标图像
* @param degree
* 旋转角度(90,180,270)
* @return
*/
public static File rotateImage(File file,int degree) throws Exception{
if(degree==90) return rotateImage90(file);
if(degree==180) return rotateImage180(file);
if(degree==270) return rotateImage270(file);
return null;
}
public static Image rotateImage(Image Image,int degree)
{
if(degree==90)
return rotateImage90(Image);
if(degree==180)
return rotateImage180(Image);
if(degree==270)
return rotateImage270(Image);
return null;
}
private static Image rotateImage90(Image image)
{
BufferedImage bufferedimage = ImageToBuf