java - 输出图像的尺寸错误

标签 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.setPixels(0,0,w,h,pixtotal)设置raster时,它给出:ArrayIndexOutOfBoundsException:坐标超出范围!

最佳答案

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

关于java - 输出图像的尺寸错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21532553/

相关文章:

java - 使用 Spring Boot 应用程序将数据库凭据作为 Quartz API 中的命令行输入传递

JavaFX 使用 AES-256 加密和解密 Zip。 IVParameterSpec 错误

java - 如何创建具有最左边位数集的 x 位二进制数

java - 将参数数据从 JQuery/Ajax 调用传递到 Jersey Web 服务

ios - 为 SKSpriteNode 选择随机图像

java - 如何在拖动光标时画出没有间隙的细线?

javascript - 单击后更改图像,但将其他选项卡重置为初始图像javascript

java - 将字节数组读取到缓冲图像中,无需 ImageIO

java - 仅更改 TIFF header 而不重写图像内容

java - 无法在 WAS 8.5 中加载 javax.imageio.ImageIO 类