2017-07-17 22 views
0

我不能似乎得到的BufferedImage的.setRGB正常工作:爪哇 - setRGB在BufferedImage的心不是更改爲正確的顏色

BufferedImage img = null; 
try 
{ 
    img = ImageIO.read(new File("icons/br.jpeg")); 
} 
catch (IOException e) 
{ 
} 

for(int x = img.getWidth()-1; x >= 0; x--) 
{ 
    for(int y = img.getHeight()-1; y >= 0; y--) 
    { 
     Color b = new Color(255, 255, 255); 
     img.setRGB(x, y, b.getRGB()); 
    } 
} 

//Save New Image 
File outputfile = new File("icons/newestSave.jpeg"); 
ImageIO.write(img, "jpeg", outputfile); 

這是br.jpeg:http://i.imgur.com/w1dZogA.png

這是outout: http://i.imgur.com/MVIxiA7.jpg

輸出應該是純白色的,因爲該方案應改變每個像素爲255,255,255

+1

RGB值255,255,255的意思是「全白」,而不是「TYPE_3BYTE_BGR純黑「。 –

+0

我修復了我的帖子,但它仍然無法解釋爲什麼輸出爲紅色。實際上改變b的rgb值並不會改變任何東西。 – Dunkas

+0

[setRGB()in java]的可能重複(https://stackoverflow.com/questions/11951646/setrgb-in-java) – hwdbc

回答

0

您的源碼Ë圖像類型TYPE_BYTE_INDEXED(使用img.getType()來顯示的類型),你需要保存類型的圖像:

BufferedImage i = null; 
BufferedImage img = null; 
try 
{ 
    i = ImageIO.read(new File("icons/br.jpeg")); 
    img = new BufferedImage(i.getWidth(),i.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
} 
catch (IOException e) 
{ 
} 

//copy the image 
img.getGraphics().drawImage(i, 0, 0, null); 


for(int x = img.getWidth()-1; x >= 0; x--) 
{ 
    for(int y = img.getHeight()-1; y >= 0; y--) 
    { 
     Color b = new Color(255, 255, 255); 
     img.setRGB(x, y, b.getRGB()); 
    } 
} 

//Save New Image 
File outputfile = new File("icons/newestSave.jpeg"); 
ImageIO.write(img, "jpeg", outputfile); 
+0

問題在於OP沒有讀取* jpeg *文件,因爲jpeg不支持索引顏色模型。如果OP正在讀取jpeg,就像代碼所說的那樣,這個問題就不存在了。 –

+0

起初,我使用的是.png,它有完全相同的問題。我知道它與顏色模型有關,但我無法弄清楚如何改變顏色模型,甚至不知道顏色模型是什麼。 – Dunkas