使用从头开始创建的 java 将彩色图像转换为黑白图像

Convert color image into black and white using java created from scratch

我想将我的图片从彩色转换为黑白,这似乎是从头开始创建的。 这是我在不同 post:

中描述的代码
    BufferedImage bi = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg"));
    ColorConvertOp op = 
        new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
    ImageIO.write(bi, "PNG", new File("/Users/bng/Documents/rendered2.png"));
    op.filter(bi, bi);

但我的图像仍然没有转换为黑白图像。此外,此代码将 rendered2.png 图像大小增加到 10 倍。 另外,如果我能找到一些 Java 8 种方法来做这件事,那就太好了。 有什么建议吗?

  1. 您必须找到要更改的图像的现有颜色的 RGB。
  2. 仅供参考,您要将其更改为白色 RGB 值为 (255,255,255),黑色 RGB 值为 (0,0,0)

  3. 如果您应用正确的方法满足您的要求,以下方法可以轻松更改颜色

    private BufferedImage changeColor(BufferedImage image, int srcColor, int replaceColor)
    {
        BufferedImage destImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = destImage.createGraphics();
        g.drawImage(image, null, 0, 0);
        g.dispose();
    
    
        for (int width = 0; width < image.getWidth(); width++)
        {
            for (int height = 0; height < image.getHeight(); height++)
            {
    
               if (destImage.getRGB(width, height) == srcColor)
                {
                   destImage.setRGB(width, height, replaceColor);
                }
    
            }
        }
    
        return destImage;
    }
    

你必须以正确的方式使用 ColorConvertOp:

  1. 创建源图像
  2. 应用过滤器
  3. 保存目的地

示例:

BufferedImage src = ImageIO.read(new File("/Users/***/Documents/Photograph.jpg"));

ColorConvertOp op = 
    new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
BufferedImage dest = op.filter(src, null);

ImageIO.write(dest, "PNG", new File("/Users/bng/Documents/rendered2.png"));

来源:

目的地:

这是对我有用的代码:

    BufferedImage input = ImageIO.read(new File("/Users/bng/Documents/Photograph.jpg"));
    // Create a black-and-white image of the same size.
    BufferedImage im = new BufferedImage(input.getWidth(), input.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
    // Get the graphics context for the black-and-white image.
    Graphics2D g2d = im.createGraphics();
    // Render the input image on it.
    g2d.drawImage(input, 0, 0, null);
    // Store the resulting image using the PNG format.
    ImageIO.write(im, "PNG", new File("/Users/bng/Documents/rendered.png"));

正是 BufferedImage.TYPE_BYTE_BINARY 为我提供了确切的解决方案。 为上述代码寻找 Java 8 版本。