1

グレースケール画像のピクセル強度データの2D配列を画像に変換する必要があります。私はこれを試しました:

BufferedImage img = new BufferedImage(
    regen.length, regen[0].length, BufferedImage.TYPE_BYTE_GRAY);  
for(int x = 0; x < regen.length; x++){
    for(int y = 0; y<regen[x].length; y++){
        img.setRGB(x, y, (int)Math.round(regen[x][y]));
    }
}
File imageFile = new File("D:\\img\\conv.bmp");
ImageIO.write(img, "bmp", imageFile);

ここで、「regen」は2D二重配列です。似ているが正確ではない出力が得られます。本来あるべきものとは完全に反対のピクセルがいくつかあります(255の値を持つピクセルの場合は黒色になります)。いくつかの灰色の色合いも白と見なされます。私がしている間違いは何ですか?

4

2 に答える 2

1

BufferedImage.TYPE_BYTE_GRAY署名もインデックスもありません。さらに、

不透明でないアルファを含むデータがこのタイプのイメージに格納されている場合、AlphaCompositeドキュメントで説明されているように、色データを事前に乗算されていない形式に調整し、アルファを破棄する必要があります。

少なくとも、符号拡張を排除し、3 番目のパラメーターの下位 8 ビットを除くすべてをマスクする必要がありますsetRGB()。問題を再現するサンプル データは決定的です。

于 2012-05-26T16:18:14.447 に答える