我想从2D数组创建图像。我使用BufferImage概念来构造Image.but原始图像与构造图像之间存在差异由下面的图像显示
我正在使用以下代码
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();
}
}
答案 0 :(得分:9)
您从ARGB
获得getRGB
值,setRGB
获得ARGB
值,因此这样就足够了:
bufferImage2.setRGB(x, y, PixelArray[x][y]);
来自BufferedImage.getRGB
的API:
返回默认RGB颜色模型(TYPE_INT_ARGB)中的整数像素和默认的sRGB颜色空间。
...并且来自BufferedImage.setRGB
的API:
将此BufferedImage中的像素设置为指定的RGB值。假设像素位于默认RGB颜色模型TYPE_INT_ARGB 和默认sRGB颜色空间中。
另一方面,我建议你改为绘制图像:
Graphics g = bufferImage2.getGraphics();
g.drawImage(g, 0, 0, null);
g.dispose();
然后您不必担心任何颜色模型等。