Javaで画像処理は可能かな?

 昨日辺りにCで画像処理用のWindowsアプリつくるのはちと辛いんじゃないの?とか書いて、C#とかJavaあたりでできたらな、ということでいろいろ実験中な訳です。
 とりあえず実行速度が極端に遅いとか、ピクセルごとの処理が苦手だと辛いんで、いろんなサイトを見ながら評価中です。てなわけで、@ITに載ってた画像を反転させるプログラムC#Javaで書いてみました。(まぁC#のは安直な方のコードをそのまんまコピペで(ぉ ) Javaの方はそれを真似て書いてみました。(下の方へ貼り付け)

 で、結果、C#遅いかなって感じです。まぁ@ITのページに書いてあるとおり、愚直に書くと糞遅いのでunsafeなポインタとか使って書きましょうみたいな記事の通りです。ちなみにうちではC#で約10秒、Javaので約2秒って感じでした(2272x1704のjpgイメージで)。

 うーむ、Javaにしようかなぁ(笑 まぁ、ほら、大学の環境がMacで、自宅でWindowsだから、どっちでも開発出来る方が便利だし(結局それ)



import java.io.*;
import javax.imageio.*;
import java.awt.image.*;

public class reverse{

public static void negative(String inputFileName, String outputFileName)
throws IOException{
File inputFile = new File(inputFileName);
File outputFile = new File(outputFileName);
String filetype = "";
BufferedImage image = ImageIO.read(inputFile);
for(int y = image.getMinY(); y < image.getHeight(); y++){
for(int x = image.getMinTileX(); x < image.getWidth(); x++){
int color = image.getRGB(x,y);
image.setRGB(x,y,color^0xffffff);
}
}
if(outputFileName.endsWith(".jpg"))
filetype = "jpg";
else if(outputFileName.endsWith(".JPG"))
filetype = "jpg";
else if(outputFileName.endsWith(".jpeg"))
filetype = "jpg";
else if(outputFileName.endsWith(".JPEG"))
filetype = "jpg";
else if(outputFileName.endsWith(".png"))
filetype = "png";
else if(outputFileName.endsWith(".PNG"))
filetype = "png";
else{
System.out.println("Illegal FileType.");
System.exit(1);
}
ImageIO.write(image, filetype, outputFile);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length != 2){
System.out.println("Incollect File Names.");
System.exit(1);
}
try{
negative(args[0], args[1]);
}
catch(IOException e){
e.printStackTrace();
}
}

}