2010-10-07 64 views
1

嘿,我已經使用J2ME讀取圖像如何在J2ME png格式讀取RGB數據

我想去做Darkenes該圖像上的一些過程,減輕

我已經讀過圖像作爲輸入流

 InputStream iStrm = getClass().getResourceAsStream("/earth.PNG"); 
     ByteArrayOutputStream bStrm = new ByteArrayOutputStream(); 

     int ch; 

    while ((ch = iStrm.read()) != -1){ 
    bStrm.write(ch); 


    byte imageData[] = bStrm.toByteArray(); 
    Image im = Image.createImage(imageData, 0, imageData.length); 

我怎樣才能獲得RGB值或我怎樣才能一些值添加到pixles
的imageData [],因此它可以更亮或暗度的陣列,

是否存在包含在我讀過的輸入流中的標題數據,當iam向它添加一些值時會導致錯誤?

回答

0

我想你應該能夠做到以下幾點:

int width = im.getWidth(); 
int height = im.getHeight(); 
int[] rgbData = new int[width*height]; // since we are working with rgba 

im.getRGB(rgbData, 0, width, 0, 0, width, height); 

// now, the data is stored in each integer as 0xAARRGGBB, 
// so high-order bits are alpha channel for each integer 

現在,如果你想要把它們分成三個陣列,每個通道,你可以做到以下幾點:

int red[][] = new int[width][height]; 
int green[][] = new int[width][height]; 
int blue[][] = new int[width][height]; 

for (int i = 0; i < width; i++) 
{ 
    for (int j = 0; j < height; j++) 
    { 
    red[i][j] = rgb[i*width + j] & 0xFF0000; 
    green[i][j] = rgb[i*width + j] & 0xFF00; 
    blue[i][j] = rgb[i+width + j] & 0xFF; 
    } 
} 
+0

這是不正確的,你爲什麼要將數組乘以4.圖像中的每個像素都是一個可以容納ARGB數據的整數。該數組只應在寬度*高度大小。 – 2010-10-07 21:43:37

+0

是的,你說得對。我編輯了這篇文章以反映這一點。 – jwir3 2010-10-07 22:16:14