我正在开发一个项目并安静地使用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();
}
}
}
答案 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
希望这有帮助!