如何为颜色范围指定新的颜色值

时间:2016-07-12 23:49:13

标签: java image grayscale

我需要我的程序浏览图像中的像素,将它们更改为灰度。然后我需要获取一系列灰度值并使用if - else和if-else-if语句对它们着色。有人可以帮我解决这个问题吗?

到目前为止,这是我的代码:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Colorize {

    BufferedImage image;
    int width;
    int height;

    public Colorize()  {
        try {
            File input = new File("Grayscale.jpg");
            image = ImageIO.read(input);
            width = image.getWidth();
            height = image.getHeight();

            for(int i=0; i<height; i++){

                for(int j=0; j<width; j++){
                    int col = image.getRGB(i, j);
                    Color c = new Color(col, true);
                    int red = c.getRed();
                    int green = c.getGreen();
                    int blue = c.getBlue();
                    if ((red>= 1)&&(red<=30))  {
                        c = new Color(c.getRed() + 10, c.getGreen(), c.getBlue());
                    }
                    if ((red>= 31)&&(red<=60))  {
                        c = new Color(c.getRed(), c.getGreen() + 10, c.getBlue());
                    }
                    if ((red>= 61)&&(red<=90))  {
                        c = new Color(c.getRed(), c.getGreen(), c.getBlue() + 10);
                    }
                    if ((red>= 91)&&(red<=120))  {
                        c = new Color(c.getRed() + 10, c.getGreen() + 10, c.getBlue());
                    }
                    if ((red>= 121)&&(red<=150))  {
                        c = new Color(c.getRed() + 10, c.getGreen(), c.getBlue() + 10);
                    }
                    if ((red>= 151)&&(red<=180))  {
                        c = new Color(c.getRed(), c.getGreen() + 10, c.getBlue() + 10);
                    }
                    if ((red>= 181)&&(red<=210))  {
                        c = new Color(c.getRed() - 10, c.getGreen(), c.getBlue());
                    }
                    if ((red>= 211)&&(red<=240))  {
                        c = new Color(c.getRed(), c.getGreen() - 10, c.getBlue());
                    }
                    else {
                        c = new Color(c.getRed(), c.getGreen(), c.getBlue());
                    }
                    image.setRGB(j,i,c.getRGB());
                }
            }

            File output = new File("Colorize.jpg");
            ImageIO.write(image, "jpg", output);

        } catch (Exception e) {}
    }

    static public void main(String args[]) throws Exception 
    {
        Colorize obj = new Colorize();
    }
}

以下是您想要尝试代码的图片。到目前为止,没有任何内容写入文件夹。

enter image description here

2 个答案:

答案 0 :(得分:1)

某处必须有例外,遗憾的是你会遇到异常并且什么都不做。

替换

catch (Exception e) {}

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

这将帮助您找到正在发生的事情。我的猜测是你会得到一个FileNotFoundException,因为Grayscale.jpg可能不在你的工作目录中。

答案 1 :(得分:0)

要将图像转换为灰度图像,您需要加权平均值。 0.2126 r 0.7152 g 0.0722 b。以这种方式获取颜色与getRed()getGreen()和getBlue()相同。最后添加颜色并使用setRGB进行设置。这会将您的图像变为灰度。

for(int i=0; i<image.getWidth(); i++){
      for(int j=0; j<image.getHeight(); j++){
          int color = image.getRGB(i,j);
          int r = ((color >> 16) & 0xFF) * 0.2126;
          int g = ((color >> 8) & 0xFF) * 0.7152;
          int b = ((color) & 0xFF) * 0.0722;
          int finalColor = (r << 16) | (g << 8) | b;
          image.setRGB(i,j,finalColor);
      }
 }

使用有关着色的更多信息编辑您的问题,以便我可以提供更多帮助。