在java中扫描图像以获得某种像素颜色

时间:2012-02-05 07:22:37

标签: java

我正在开发一个项目并安静地使用java。我想逐个像素地扫描图像以获得某种颜色,即青色,然后打印该像素颜色的坐标。代码运行,创建输出文件但不写任何内容。 有人可以帮助我找到错误。我还想知道在使用相同的代码时如何在java中读取.tiff文件。

Java代码:

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.imageio.ImageIO;

public class GetPixelColor {

    //int y, x, tofind, col;
    /**
     * @param args the command line arguments
     * @throws IOException  
     */
    public static void main(String args[]) throws IOException {
        try {
            //read image file
            File file1 = new File("E:\\birds.jpg");
            BufferedImage image1 = ImageIO.read(file1);

            //write file
            FileWriter fstream = new FileWriter("E:\\pixellog1.txt");
            BufferedWriter out = new BufferedWriter(fstream);

            //color object
            //Color cyan = new Color(0, 255, 255);

            //find cyan pixels
            for (int y = 0; y < image1.getHeight(); y++) {
                for (int x = 0; x < image1.getWidth(); x++) {

                  int c = image1.getRGB(x,y);
                  Color color = new Color(c);

                  //int  red = (c & 0x0000FFFF) >> 16;
                  //int  green = (c & 0x0000FFFF) >> 8;
                  //int  blue = c & 0x0000FFFF;

                   //if (cyan.equals(image1.getRGB(x, y)){

                   if (color.getRed() < 30 && color.getGreen() > 255 && color.getBlue() > 255) {
                        out.write("CyanPixel found at=" + x + "," + y);
                        out.newLine();

                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

问题可能是你的birds.jpg图像不包含正好是r = 0,g = 255,b = 255(即青色)的像素。即使您在Paint中打开图像并绘制青色像素,保存时颜色也可能会略有改变,因为JPEG是一种有损格式。

您可以尝试使用以下代码替换if语句来测试接近青色的像素:

Color c = new Color(image1.getRGB());
if (c.getRed() < 30 && c.getGreen() > 225 && c.getBlue() > 225) {

答案 1 :(得分:1)

我认为另一个问题出在你的if语句中。你有图像寻找超过255的东西。但是,在java中,255是红色,蓝色或绿色的最大值。如果您正在寻找255,请从color.getBlue() > 255更改它 至 color.getRed() == 255 希望这有帮助!