1
我想從文件夾中讀取圖像並將其寫回旋轉。 這是更快方式(而不是更容易的)旋轉圖像90度或90度(90,180,270)和只是它在Java 8的倍數?以90度或倍數旋轉圖像的更快方法
我在互聯網上搜索了很多時間來找到這個問題的答案......但沒有。所以我在想你們,也許你們中的一個人幫我解決了這個問題。我會真正認識到那個人。
非常感謝。
我想從文件夾中讀取圖像並將其寫回旋轉。 這是更快方式(而不是更容易的)旋轉圖像90度或90度(90,180,270)和只是它在Java 8的倍數?以90度或倍數旋轉圖像的更快方法
我在互聯網上搜索了很多時間來找到這個問題的答案......但沒有。所以我在想你們,也許你們中的一個人幫我解決了這個問題。我會真正認識到那個人。
非常感謝。
正如@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(); }
}
你有沒有聽說過的仿射變換的? –
是的,我聽說過這個,我已經做了一些測試。但我不確定這是否是更快的方法...... – cavaler12345
該旋轉的計算甚至不是I/O和可能壓縮所需時間的0.001%。 (實際上並不是真正的計算,你只是獲得了像素索引的不同訪問行爲,這些行爲約束於這些* nice *旋轉候選:90°切換行和列; 180°反轉模式循環) – sascha