2013-10-29 50 views
-1

目前我想獲得一個圖像像素的數組。現在,我使用這個代碼:
Java nullpointerexception與bufferedimage.getrgb

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

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

但比我要使用的像素陣列它提供了一個NullPointerException。我以前使用過這個代碼,沒有任何錯誤。
它爲什麼會出現,我該如何做這項工作?

+0

'pixels'沒有初始化,你剛纔宣佈它。 –

回答

0

的Class 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顏色模型整數像素的陣列。但是,如果你通過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
+0

謝謝,這正是我想知道的 – Leeuwtje