4

2D Array から画像を作成したいのですが、BufferImage の概念を使用して Image を構築しましたが、元の画像と構築された画像には違いがあります。

これは私の元の画像です

再構築後の画像

次のコードを使用しています

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

/** * * @author pratibha */

public class ConstructImage{
    int[][] PixelArray;
    public ConstructImage(){
        try{

        BufferedImage bufferimage=ImageIO.read(new File("D:/q.jpg"));
        int height=bufferimage.getHeight();
        int width=bufferimage.getWidth();
        PixelArray=new int[width][height];
        for(int i=0;i<width;i++){
            for(int j=0;j<height;j++){
                PixelArray[i][j]=bufferimage.getRGB(i, j);
            }
        }
        ///////create Image from this PixelArray
        BufferedImage bufferImage2=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);

        for(int y=0;y<height;y++){
            for(int x=0;x<width;x++){
                int Pixel=PixelArray[x][y]<<16 | PixelArray[x][y] << 8 | PixelArray[x][y];
                bufferImage2.setRGB(x, y,Pixel);
            }


        }

         File outputfile = new File("D:\\saved.jpg");
            ImageIO.write(bufferImage2, "jpg", outputfile);


        }
        catch(Exception ee){
            ee.printStackTrace();
        }
    }

    public static void main(String args[]){
        ConstructImage c=new ConstructImage();
    }
}
4

1 に答える 1

8

ARGBから値を取得し、はgetRGBsetRGBを取得するARGBため、これを行うだけで十分です。

bufferImage2.setRGB(x, y, PixelArray[x][y]);

のAPIからBufferedImage.getRGB

デフォルトのRGBカラーモデル(TYPE_INT_ARGB)とデフォルトのsRGBカラースペースの整数ピクセルを返します。

...そしてのAPIからBufferedImage.setRGB

このBufferedImageのピクセルを指定されたRGB値に設定します。ピクセルは、デフォルトのRGBカラーモデルであるTYPE_INT_ARGBと、デフォルトのsRGB色空間にあると見なされます。


一方、代わりに画像をペイントすることをお勧めします。

Graphics g = bufferImage2.getGraphics();
g.drawImage(g, 0, 0, null);
g.dispose();

そうすれば、カラーモデルなどを気にする必要はありません。

于 2012-08-10T07:46:18.670 に答える