【问题标题】:BufferedImage & Rasters (Java)缓冲图像和栅格 (Java)
【发布时间】:2015-06-07 20:11:21
【问题描述】:

你好,谁能给我解释一下这段代码

private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();

据我了解,栅格仅表示一组像素。 getDataBuffer() 为我提供了可编辑的缓冲区,以便我可以实际更改像素属性。我主要对 .getData() 和 DataBufferInt 演员感到困惑,这两件事到底是做什么的。

提前致谢。

【问题讨论】:

    标签: java buffer bufferedimage raster


    【解决方案1】:

    假设imageBufferedImagegetRaster() 将为您提供图片的WritableRaster。然后,getDataBuffer() 将为您提供数据缓冲区,它是像素阵列周围的薄包装。

    因为BufferedImage 的原生像素数组可能是byte[]short[]int[] 甚至是float[]double[],所以DataBuffer 的多个子类存在于每种类型的后备数组(甚至还有一个TYPE_USHORT 用于未签名的short 数据,它仍在使用short[])。由于抽象DataBuffer 超类中没有getData() 或类似方法,因此您需要将缓冲区强制转换为适当的子类,以便能够以本机形式访问数据。在您的情况下这是 DataBufferInt,但您可以使用 dataBuffer.getType() 进行检查。

    通过适当的数据缓冲区子类,您可以使用getData() 方法访问本机像素。您现在可以以任何您想要的方式直接修改像素。

    但是,请注意,直接访问像素阵列会使您的图像“不受管理”,并禁用BufferedImage 的某些硬件加速。这可能不是问题,但如果您经常将此图像绘制到屏幕上,可能会导致渲染速度变慢和帧速率下降。

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 1970-01-01
      • 2023-03-28
      • 2013-10-03
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多