4

我想从二维数组创建图像。我使用 BufferImage 概念来构造图像。但是原始图像和构造图像之间存在差异,如下图所示

这是我的原图

重建后的图像

我正在使用以下代码

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

/** * * @author 普拉提巴 */

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值,getRGB然后得到setRGB一个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 回答