2016-04-12 12 views
0

fileInputStreamを使用して画像を読み込んで書き出し、別の画像を生成しようとしています。ピクセルを読み込んだ後、ピクセルを変更して左右の反転イメージを取得したい。しかし、今ではイメージを読み込んで直接書き出すだけですが、何か問題があります。ウルトラエディットを使用した後、ここに私は最初の4バイトから得るものです:
元の画像:42 4D 7A 95
新しいイメージ:42 4D 7A 3F

そのMSBが1であるすべてのバイトが変更されているようです〜3F。私は、Javaのすべてのデータ型が署名されていることを知っているし、私は既にしようとしているすべてのバイトに0xff。JavaでFileInputStreamを使用して画像を読み取る

public static void imageOut() { 
    try { 
     FileInputStream in = new FileInputStream(new File(getPath())); 
     int[] temp = new int[fSize]; 
     int i = 0; 

     while (in.available() > 0) { 
      temp[i] = in.read(); 
      i++; 
     } 

     OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(getOutputPath())); 
     for (int j = 0; j < temp.length; j++) { 
      out.write(((byte)temp[j])); 
     } 

     out.flush(); 
     out.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

答えて

1

はいあなたはバイト

out.write(((byte)temp[j])) 

を書いているので、あなたが4バイトであるint型を記述する必要があります。

out.write(temp[j]) 

をバイトをint型を切り捨てませ結局これは、イメージを書き込むための方法ではありません - このアプリケーションのためのそのOKので、これは(単なるファイル以上何をコピー)ファイルを再現します。しかし、ピクセルを変更して新しいイメージを書き換えたい場合は、イメージを書き込むためにimageio(またはその他のメカニズム)が必要になります。

-

OutputStreamWriterは文字を書き込みます。なぜ等価物を使用しないのですか?

FileOutputStream:読んだときにバイトを書くことができます。

+0

まだ変更はありません。私がImageIOを使用しない理由は、単にbmpピクセルを処理してデコードする方法を知りたいからです。 – qq52184962

+0

imageioはbmpを読み込みますが、自分で扱いたいと思っています。他のフォーマット – gpasch

関連する問題