我想从文件夹中读取图像并将其旋转回来。 哪个是更快方式(不是更容易)旋转90度或 90度(90,180,270)的倍数的图像,而只是在Java 8中?
我在互联网上搜索了很多时间来找到这个问题的答案......但没有。所以我想到你们,也许你们其中一个人可以帮助我。我真的会认出那个人。
非常感谢。
答案 0 :(得分:1)
正如@sascha所说:“你只是得到了一个不同的像素索引访问行为,这些行为受限于这些漂亮的轮换候选者”。
因此,您可以使用图像处理框架来访问像素并以这种方式转换图像。
就我而言,我使用了Marvin Framework。在我的笔记本上,500x298图像的旋转过程需要12毫秒。
源代码:
public class RotateImages {
public RotateImages(){
MarvinImage image = MarvinImageIO.loadImage("./res/auto.jpg");
MarvinImageIO.saveImage(rotate90(image), "./res/auto_90.jpg");
MarvinImageIO.saveImage(rotate180(image), "./res/auto_180.jpg");
MarvinImageIO.saveImage(rotate270(image), "./res/auto_270.jpg");
}
private MarvinImage rotate90(MarvinImage image){
MarvinImage imageOut = new MarvinImage(image.getHeight(), image.getWidth());
for(int y=0; y<image.getHeight(); y++){
for(int x=0; x<image.getWidth(); x++){
int newX = y;
int newY = (image.getWidth()-1)-x;
imageOut.setIntColor(newX, newY, image.getIntColor(x, y));
}
}
return imageOut;
}
private MarvinImage rotate180(MarvinImage image){
MarvinImage imageOut = new MarvinImage(image.getWidth(), image.getHeight());
for(int y=0; y<image.getHeight(); y++){
for(int x=0; x<image.getWidth(); x++){
int newX = (image.getWidth()-1)-x;
int newY = (image.getHeight()-1)-y;
imageOut.setIntColor(newX, newY, image.getIntColor(x, y));
}
}
return imageOut;
}
private MarvinImage rotate270(MarvinImage image){
MarvinImage imageOut = new MarvinImage(image.getHeight(), image.getWidth());
for(int y=0; y<image.getHeight(); y++){
for(int x=0; x<image.getWidth(); x++){
int newX = (image.getHeight()-1)-y;
int newY = x;
imageOut.setIntColor(newX, newY, image.getIntColor(x, y));
}
}
return imageOut;
}
public static void main(String[] args) { new RotateImages(); }
}