目前我想获得一个包含图像像素的数组。我现在正在使用此代码:
int[] pixels;
int width = firstfloorimg.getWidth();
int height = firstfloorimg.getHeight();
firstfloorimg.getRGB(0, 0, width, height, pixels, 0, width);
但是当我想使用像素数组时,它会产生NullpointerException。我之前使用过此代码没有错误 为什么会出现这种情况?如何才能使其发挥作用?
答案 0 :(得分:0)
班级BufferedImage
提供getRGB()
方法的两种变体:
第一个,int getRGB(int x, int y)
将返回单个像素,如返回类型所示。
第二个:
int[] getRGB(int startX, int startY, int w, int h,
int[] rgbArray, int offset, int scansize)
返回默认RGB颜色模型中的整数像素数组。但是,如果您传递的rgbArray
为null
,则此函数会在其中创建一个新的rgbArray
并将其返回:
public int[] getRGB(int startX, int startY, int w, int h,
int[] rgbArray, int offset, int scansize) {
// other code
if (rgbArray == null) {
rgbArray = new int[offset+h*scansize];
}
// other code
return rgbArray;
}
但同样,在使用之前,您必须将返回的数组分配给pixels
。在getRGB
函数内创建的数组在传递给此函数之前无法更改pixels
数组的引用null
。
考虑在第二个函数上使用getPixel(x, y)
函数,因为与第二个函数不同,getPixel(x, y)
不会丢弃Java2D所做的优化。讨论它不属于这个问题的范围。
<强>参考:强>