2012-11-04 86 views
0

當我使用getRGB()並且之後,獲取像素顏色紅色或綠色或藍色分量(它並不重要,因爲它們在灰度圖像中相等)並比較結果用MS Paint Eyedropper結果,它的不同的東西。getRGB()結果與從MS Paint Eyedropper收到的結果不匹配

import java.awt.Color; 
import java.awt.color.ColorSpace; 
import java.awt.image.BufferedImage; 
import java.awt.image.ColorConvertOp; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.imageio.ImageIO; 

public class Separator { 

BufferedImage inputImg; 

private int _inpupImgWidth; 
private int _inpupImgHeight;     

public Separator(){ 

    try { 
     inputImg = ImageIO.read(new File("inputImg.bmp")); 
     _inpupImgWidth = inputImg.getWidth(); 
     _inpupImgHeight = inputImg.getHeight(); 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println(getGrayPixelData(60, 44)); 
    try { 
     ImageIO.write(inputImg, "BMP", new File("outputImg.bmp")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

public void getGrayPixelData(int x, int y){ 
    Color myColor = new Color(inputImg.getRGB(x, y));  
    System.out.println("Red: " + myColor.getRed()); 
    System.out.println("Green: " + myColor.getGreen()); 
    System.out.println("Blue: " + myColor.getBlue()); 
    } 

public static void main(String[] args) { 
    new Separator(); 
    System.out.println("The End"); 
} 
} 

這裏是圖片的鏈接,我使用http://postimage.org/image/t6tvlv941/

+1

*「這是我使用的圖像的鏈接」*您可以在20Kb以下的圖像中再現此效果(而不是超過500Kb的圖像)? –

回答

0

的圖像是灰度模式。

如何將灰度值轉換爲R,G,B是非常隨意的。

一種天真的方法是將相同的灰度值分配給每個R,G和B分量。

更復雜的方法是使用一些轉換,考慮眼睛對這些不同組件的敏感度,或考慮顯示器或其他顯示設備的配置文件。

顯然,Java和您的程序正在使用不同的轉換。但是在任何一種情況下,精確的R,G和B值都基本上沒有意義:原始數據不是R,G,B格式。

+0

對於其他所有圖像,我在Paint和我的程序中都得到了相同的RGB結果。這個問題只發生在這張特定的圖片上。你能解釋一下嗎? – Neo

+0

沒有至少看到其他圖像,並可能看到MS Paint使用的轉換算法,我無法解釋確切的細節。但是,你似乎正在發明一個不存在的「問題」:MS Paint沒有內在的必要性將灰度值轉換爲RGB,就像Java或任何其他程序或庫一樣。 –