Javaでtifとbmpの内容を比較する(Sanselan,Image I/O)



Pythonでtifが上手く読み込めなかったので、Javaで
チャレンジすることに。

Java Image I/O(JAI)を使えばできることはわかっていたので、
あえて別な手段で。

http://d.hatena.ne.jp/rabbit2go/20081001/1222866752
こちらの記事を参考に、Sanselanを使ってみましたが・・・
tifの読み込みでエラーになりました。

tifは多彩なフォーマットを許容しているので、特殊な形式
(今回はスキャナで取り込んだFax G4)は読めないのかも。

結局、JAIを使いました。
ソースはこんな感じ。
■MainProccess.java

package fujishinko.tif;

import java.awt.image.BufferedImage;
import java.io.*;
//import java.util.Arrays;
import javax.imageio.ImageIO;

public class MainProccess {
  
  public static void main(String[] args) throws Exception {
    
    System.out.println("検証開始");
    doCheck("sample.tif", "converted.bmp");
System.out.println("検証完了");

  }
public static void doCheck(String tif, String bmp) throws Exception {
File tifFile = new File(tif);
File bmpFile = new File(bmp);

BufferedImage tifImage = ImageIO.read(tifFile);
BufferedImage bmpImage = ImageIO.read(bmpFile);

int width = tifImage.getWidth();
int height = tifImage.getHeight();

if (width != bmpImage.getWidth()){
  System.out.println("ERROR:横幅不一致:" + tif);
  return;
}

if (height != bmpImage.getHeight()){
  System.out.println("ERROR:縦幅不一致:" + tif);
  return;
}
int[] tifpixs = tifImage.getData().getPixels(0, 0, width, height, (int[])null);
int[] bmppixs = bmpImage.getData().getPixels(0, 0, width, height, (int[])null);
for (int i = 0; i < tifpixs.length; i++){
  if (tifpixs[i] != bmppixs[i]){
    System.out.println("ERROR:ピクセル不一致:"+tif);
    return;
  }
}
/* OutOfMemoryErrorで落ちる・・・
if (!Arrays.equals(tifpixs , bmppixs)){
  System.out.println("ERROR:ピクセル不一致:"+tif);
  return;
}
*/

System.out.println("検証通過:"+tif);
}
}



Sun提供モノは強いです(^^;


もどる