2012-05-30 58 views
0

我有一些非常簡單的代碼,這只是不工作:Java ImageIO,無法設置像素值?

int[] manualPixels = new int[width * height * 3]; 
for (int index = 0; index < manualPixels.length; index++) { 
    if (index % 3 == 2) { 
     manualPixels[index] = 255; 
    } 
} 
BufferedImage pixelImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
pixelImage.setRGB(0, 0, width, height, manualPixels, 0, width); 

ImageIO.write(pixelImage, "jpeg", tempFile); 

這應該,至於我能確定,輸出紅色,綠色,藍色的圖像,取決於是否爲0,1,或2用於for循環中的if語句。問題是,不管那個,我總是會得到藍色和黑色的條紋,不管我設置了哪個像素。例如:

enter image description here

我敢肯定一定是我做錯了一些基本的東西,我只是沒有看到它是什麼。有任何想法嗎?

+0

「我這只是不工作了一些非常簡單的代碼」:故事我的生活 – Hassan

+0

爲了更好地幫助,請發佈[SSCCE](http://sscce.org/)。 –

+1

順便說一句 - JPEG是圖像類型的驚人選擇。爲什麼不使用PNG? –

回答

3

INT_RGB將所有通道打包成int的最低有效三個八位字節。這意味着你將每三個像素設置爲藍色,其餘的都是黑色。 (然而,這並不符合你的形象 - 你產生之後更改代碼?)

試試這個:

int[] manualPixels = new int[width * height]; 
for (int index = 0; index < manualPixels.length; index++) { 
    switch (index % 3) { 
     case 0: manualPixels[index] = 0xFF0000; break; // red 
     case 1: manualPixels[index] = 0x00FF00; break; // green 
     case 2: manualPixels[index] = 0x0000FF; break; // blue 
    } 
} 
+0

謝謝,修復它。我知道這一定是我的一些愚蠢的疏忽。 – aroth