输出图像的尺寸有些颠倒。对齐也是相反的。
BufferedImage theImage = new BufferedImage(h,w, BufferedImage.TYPE_BYTE_GRAY);
int [] pixtotal=new int [total_pixels];
for (int x = 0; x < w; x++)
{
for (int y = 0; y < h; y++)
{
int gray= image.getRGB(x, y)& 0xFF;
pixtotal[i]=gray;
i++;
}
}
File outputfile = new File("e:/bndwimage.jpg");
WritableRaster raster = (WritableRaster) theImage.getData();
raster.setPixels(0,0,h,w,pixtotal);
theImage.setData(raster);
ImageIO.write(theImage, "jpg", outputfile);
h
和w
分别是高度和宽度。
为什么我的图像出错?
编辑:
P.S:我已经尝试了w
和h
的所有组合。
使用raster
设置raster.setPixels(0,0,w,h,pixtotal)
时,会显示:ArrayIndexOutOfBoundsException: Coordinate out of bounds!
答案 0 :(得分:3)
raster.setPixels(0,0,H,W,pixtotal);
根据Oracle文档,setPixels
采用参数x, y, w, h, iArray
。您已经交换了宽度和高度,这将逻辑地交换图像的尺寸。这也极大地改变了解析数组中像素的方式,而不会导致任何错误。
同样的问题适用于您的new BufferedImage(h,w, BufferedImage.TYPE_BYTE_GRAY)
。
最后,我没有看到定义i
的位置,但是“递增1”通常不是像素被索引到一维数组中的方式。 x + (y * w)
应该是任何给定像素的正确索引。