2013-11-20 50 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