2012-11-04 77 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或任何其他程序或库一样。 –