私はJAVA言語の初心者であり、コード(グレースケールのJPEG画像の書き込み)を使用する必要があります。かなり長い間検索しましたが、今何が問題なのかわかりません。
public static boolean writeImage(String inputFileName, String outputFileName, int[][][] imageData)
{
BufferedImage inputImage = MyImageReader.readImageIntoBufferedImage( inputFileName );
if ( inputImage == null )
{
System.out.println(" Could not open input image.");
return false;
}
BufferedImage outputImage = new BufferedImage( inputImage.getWidth(), inputImage.getHeight(),
inputImage.getType() );
WritableRaster outputRaster, inputRaster;
inputRaster = inputImage.getRaster();
outputRaster = inputRaster.createCompatibleWritableRaster();
int band = 0;
int numbands = outputRaster.getNumBands();
int height, width;
height = outputRaster.getHeight();
width = outputRaster.getWidth();
int[] pixelData = new int[ 1 ];
for ( int y = 0; y < height; y++ )
for ( int x = 0; x < width; x++ )
{
for ( band = 0; band < 1; band++ )
{
pixelData[ 0 ] = imageData[0][y][x];
}
outputRaster.setPixel(x, y, pixelData );
}
outputImage.setData( outputRaster );
File outputFile = new File( outputFileName );
try
{
if ( !ImageIO.write( outputImage, "jpg", outputFile ))
{
System.out.println("Could not find image format for output image.");
return false;
}
}
catch ( Exception e )
{
System.out.println("Could not write output file.");
return false;
}
return true;
}
上記のコードを使用しています。コードは、入力jpegファイルからプロパティをコピーしてWritableRasteを作成するように見えるため、出力jpegファイルは同じサイズになります。
私がやっていることは、グレースケールのラスター値でいくつかの画像処理を行い、それをjpegファイルとして保存することです。
単純な4x4のケースでテストしたところ、結果は次のようになりました。
(高さ、幅)座標で保存される入力配列
1 2 3 4
5 6 7 8
15 16 17 18
25 26 27 28
保存したファイルを読み込むと、(高さ、幅)座標で表示されます
2 3 4 5
3 4 5 6
15 15 16 17
25 26 27 28
これはどのように可能ですか?何が悪いのかわかりません。画像リーダーは安全であることが証明されています。OracleのJDK1.7で実行していますが、元のコードが過去に記述されている可能性があります。しかし、これが問題にならないことを願っています。
ありがとうございました!