2013-11-20 86 views
0

我想要獲取圖像中每個像素的rgb值。爲此,我使用了getRGB(),它返回一個整數,我使用Color(arg,true)進行轉換。如果我打印出getRGB()結果並將其中一個數字粘貼到Color類中,它就可以工作。但是,如果使所示的整數等於rgb並將其放入Color,以便我可以遍歷每個像素,它將返回所有值的255。java中的顏色轉換

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferInt; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.*; 

public class kmeans { 

    public static void main(String[] args) throws IOException { 
     File file = new File("andy.jpg"); 
     BufferedImage image = ImageIO.read(file); 
     int width = image.getWidth(); 
     int height = image.getHeight(); 
     for (int i = 0; i < width; i++) { 
      for (int j = 0; j < height; j++) { 
       int rgb = image.getRGB(i, j); 
       // System.out.println(rgb); 
       Color c = new Color(rgb, true); 
       // System.out.println(c.getRed()+" "+c.getGreen()+" "+c.getBlue()+" "); 
       System.out.println(c); 
      } 
     } 
    } 
} 
+1

*有這麼多*個像素;也許這真的是圖像中許多白色像素的結果(其中很多)? – user2864740

+0

問題是什麼? – Sentry

+0

它們中的很多都是白色的,但不是全部基於getRGB()返回的整數。但通過彩色運行它使他們全部255. – tnyN

回答

0

你試過設置new Color(rgb, true)new Color(rgb, false)?當你得到rgb的int值時,你不會得到alpha值(也就是當前像素的透明度)。在構造函數中使用該值時,如果沒有alpha值,它可能會混淆結果。

0

我認爲你的代碼很好,假設有問題的話,問題就在別處。以下是您的代碼爲某些隨機JPEG生成的輸出示例:

java.awt.Color[r=126,g=116,b=104] 
java.awt.Color[r=122,g=112,b=100] 
java.awt.Color[r=116,g=106,b=94] 
java.awt.Color[r=117,g=107,b=95] 
java.awt.Color[r=123,g=113,b=101] 
java.awt.Color[r=122,g=112,b=100] 
+0

是的,我切換到另一張圖片,它的工作。奇怪。 – tnyN