2012-02-28 66 views
0

我試圖使用方法getRGB()訪問圖像的像素。我用於這個purose的圖像是8位圖像,即每個像素由8位表示,因此可能的值是0-255。 我所用PNG 8位圖像的圖像因此類型 'TYPE_BYTE_INDEXED'將r,g,b值轉換爲一個像素值

if (type == BufferedImage.TYPE_BYTE_INDEXED) { 
    System.out.println("type.byte.indexed"); 
    System.out.print(h+" "+w);  

    sourceImage.getRGB(0, 0, w, h, rgbs, 0, w); //rgbs is integer array 

    for (i = 0; i <10; i++) { 
     System.out.print(" "+rgbs[i]); 
    } 
    System.out.println("rgbs len: " + rgbs.length); 
} 

的for循環的輸出是什麼ILKE:

-12048344 -12174804 -12048344 -12174804 -12174804 ....... 

我獲得R,G,B分量從它和存儲陣列:

Color c=new Color(rgbs[i]); 
    r=c.getRed(); 
    g=c.getGreen(); 
    b=c.getBlue(); 

現在怎麼辦,我再次將這些值,這樣我就可以使用setRGB方法?像24位圖像,我們可以使用

int rgb=65536*pixel[i]+256*pixel[i+1]+pixel[i+2]; 

回答

4

documentation明確指出,返回的值在ARGB形式:

返回默認的RGB顏色模型整數像素的陣列(TYPE_INT_ARGB)和默認sRGB色彩空間

您可以

byte[] data=((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(0); 
012訪問底層的緩衝區(包含索引像素)
+1

該代碼缺少括號。這是正確的代碼:((DataBufferByte)bufferedImage.getRaster()。getDataBuffer())。getData(0) – Nadine 2016-07-28 13:30:12

+1

謝謝納丁!我相應地更新了我的答案。 – Simon 2016-07-30 06:50:15