2016-02-28 25 views
2

我在另外三個BufferedImage中分離了我的圖像的顏色,當我將它們放在一起時,我只有藍色。 當我測試紅色圖像時,確實得到了紅色,我發現它也是藍色,它與綠色完全一樣。 這是我的代碼。爲什麼我的BufferedImage選擇了錯誤的顏色?

public void modifyImage(BufferedImage image) { 
    BufferedImage green = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); 
    BufferedImage blue = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); 
    BufferedImage red = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); 
    for(int y= 0; y < image.getHeight(); y ++){ 
     for(int x = 0; x < image.getWidth(); x++){ 
      red.setRGB(x, y, new Color(image.getRGB(x, y)).getRed()); 
      green.setRGB(x, y, new Color(image.getRGB(x, y)).getGreen()); 
      blue.setRGB(x, y, new Color(image.getRGB(x, y)).getBlue()); 
     } 
    } 
    BufferedImage finalImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_INT_RGB); 
    for(int y= 0; y < image.getHeight(); y ++){ 
     for(int x = 0; x < image.getWidth(); x++){ 
      finalImage.setRGB(x, y, new Color(new Color(red.getRGB(x, y)).getRed(),new Color(green.getRGB(x, y)).getGreen(),new Color(blue.getRGB(x, y)).getBlue()).getRGB()); 
     } 
    } 

    this.image = green; 
} 

那麼我的錯誤在哪裏?我錯過了什麼?

回答

4

Color方法getRedgetGreengetBlue該顏色分量多項強度返回從0到255如果這些數字解讀成包裝RGB顏色,他們只填寫的藍顏色分量,所以這就是爲什麼你只有藍色。您需要按位右移才能將顏色組件移到正確的位置。

再說,你不需要使用這些方法首先提取顏色,只需使用口罩:

 red.setRGB(x, y, image.getRGB(x, y)&0xFF0000); 
     green.setRGB(x, y, image.getRGB(x, y)&0x00FF00); 
     blue.setRGB(x, y, image.getRGB(x, y)&0x0000FF); 
相關問題