输出图像的尺寸错误

时间:2014-02-03 16:30:55

标签: java image jai

输出图像的尺寸有些颠倒。对齐也是相反的。

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);

hw分别是高度和宽度。 为什么我的图像出错?

编辑: P.S:我已经尝试了wh的所有组合。

使用raster设置raster.setPixels(0,0,w,h,pixtotal)时,会显示:ArrayIndexOutOfBoundsException: Coordinate out of bounds!

1 个答案:

答案 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)应该是任何给定像素的正确索引。