BufferedImage&栅格(Java)

时间:2015-06-07 20:11:21

标签: java buffer bufferedimage raster

嗨,有人可以向我解释这段代码吗

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

根据我的理解,栅格只代表一组像素。 getDataBuffer()为我提供了可编辑的缓冲区,这样我就可以实际改变像素属性。我很困惑,主要是关于.getData()和DataBufferInt演员,这两件事究竟做了什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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