Java nullpointerexception with bufferedimage.getrgb

时间:2013-10-29 14:44:15

标签: java arrays image nullpointerexception

目前我想获得一个包含图像像素的数组。我现在正在使用此代码:

int[] pixels;
int width = firstfloorimg.getWidth();
int height = firstfloorimg.getHeight();

firstfloorimg.getRGB(0, 0, width, height, pixels, 0, width);

但是当我想使用像素数组时,它会产生NullpointerException。我之前使用过此代码没有错误 为什么会出现这种情况?如何才能使其发挥作用?

1 个答案:

答案 0 :(得分:0)

班级BufferedImage提供getRGB()方法的两种变体:

  1. 第一个int getRGB(int x, int y)将返回单个像素,如返回类型所示。

  2. 第二个

    int[] getRGB(int startX, int startY, int w, int h, 
                  int[] rgbArray, int offset, int scansize)
    
  3. 返回默认RGB颜色模型中的整数像素数组。但是,如果您传递的rgbArraynull,则此函数会在其中创建一个新的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所做的优化。讨论它不属于这个问题的范围。

    <强>参考:

    1. BufferedImage.getRGB