使用从头开始创建的 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 种方法来做这件事,那就太好了。
有什么建议吗?
- 您必须找到要更改的图像的现有颜色的 RGB。
仅供参考,您要将其更改为白色 RGB 值为 (255,255,255),黑色 RGB 值为 (0,0,0)
如果您应用正确的方法满足您的要求,以下方法可以轻松更改颜色
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
:
- 创建源图像
- 应用过滤器
- 保存目的地
示例:
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 版本。
我想将我的图片从彩色转换为黑白,这似乎是从头开始创建的。 这是我在不同 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 种方法来做这件事,那就太好了。 有什么建议吗?
- 您必须找到要更改的图像的现有颜色的 RGB。
仅供参考,您要将其更改为白色 RGB 值为 (255,255,255),黑色 RGB 值为 (0,0,0)
如果您应用正确的方法满足您的要求,以下方法可以轻松更改颜色
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
:
- 创建源图像
- 应用过滤器
- 保存目的地
示例:
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 版本。