0

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

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

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

但是,当我想使用像素数组时,它会给出 NullpointerException。我以前使用过这段代码,没有错误。
为什么会发生这种情况,我该如何进行这项工作?

4

1 回答 1

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)
    

它返回默认 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 所做的优化。讨论它超出了这个问题的范围。

参考:

  1. BufferedImage.getRGB
于 2013-10-29T15:21:21.800 回答