2011-11-24 96 views
3

這幾行代碼檢索圖像所有像素的數組。從DataBuffer字節數組中獲取R G B顏色

ImageInputStream is = ImageIO.createImageInputStream(f); 
Iterator iter = ImageIO.getImageReaders(is); 
ImageReader imageReader = (ImageReader) iter.next(); 
imageReader.setInput(is); 
BufferedImage image = imageReader.read(0); 
final byte[] a = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 

如何取回實際R G B通道的像素(例如0,0)?

編輯 我使用這個數組是因爲更快地訪問圖像。這就是爲什麼我不使用更高的API的方法,如的getRGB的getSample ...

回答

6

假設image.getType() == TYPE_INT_RGB那麼你有一個這樣的數組:

R, G, B, R, G, B, R, G, B, ... 

您可以訪問像素的值(X,Y)通過

int width = image.getWidth(); 

... 

byte R = a[3*(x+y*width)]; 
byte G = a[1+3*(x+y*width)]; 
byte B = a[2+3*(x+y*width)]; 

還有其他一些imagetypes考慮,你可以在閱讀documentation

訪問方法基本保持不變,您只是有不同的顏色排序或額外的alpha通道。然而,對於那些4個像素你必須爲像素(X,Y)的第一通道的表現公式調整爲

byte A = a[4*(x+y*width)]; 
+0

我怎麼能說getPixel一個簡單的字節數組()方法?!? – myro

+0

是的,我需要非常快速的訪問。我編輯了這個問題 – myro

相關問題