将彩色图像转换为灰度图像在 java 中显示黑色图像
Converting a color image to grayscale is showing black image in java
我正在尝试使用 Java 将图像转换为灰度图像。这里的问题是,当我在转换为灰度后尝试保存该图像时,它显示的是黑色图像。我几乎不知道这种图像转换。我想知道为什么它不起作用,您的回答将对我的项目有所帮助。谢谢你。
BufferedImage image = ImageIO.read(fileContent);
File outputFile = new File(date1);
ImageIO.write(image1, "png", outputFile);
(这是从 html 页面获取的彩色图像,它工作正常。当我尝试 display/save 这张图像时,彩色图像是可见的。但是问题出现在下面的代码用于将彩色图像转换为灰度图像。)
BufferedImage image1 = new BufferedImage(width, height,BufferedImage.TYPE_BYTE_GRAY);
Graphics graphics = image1.getGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();
File outputFile = new File(date1);
ImageIO.write(image1, "png", outputFile);
存在颜色 space 转换问题。您可以手动将输出图像的每个像素转换为灰度,并这样设置输出图像的像素:
int gray = red * 0.299 + green * 0.587 + blue * 0.114
或使用 ColorConvertOp class 为您进行转换:
BufferedImage in = ImageIO.read(inputFile);
BufferedImage out = new BufferedImage(in.getWidth(), in.getHeight(), BufferedImage.TYPE_INT_ARGB);
ColorConvertOp op = new ColorConvertOp(in.getColorModel().getColorSpace(), ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(in, out);
ImageIO.write(out, "png", outputFile);
我正在尝试使用 Java 将图像转换为灰度图像。这里的问题是,当我在转换为灰度后尝试保存该图像时,它显示的是黑色图像。我几乎不知道这种图像转换。我想知道为什么它不起作用,您的回答将对我的项目有所帮助。谢谢你。
BufferedImage image = ImageIO.read(fileContent);
File outputFile = new File(date1);
ImageIO.write(image1, "png", outputFile);
(这是从 html 页面获取的彩色图像,它工作正常。当我尝试 display/save 这张图像时,彩色图像是可见的。但是问题出现在下面的代码用于将彩色图像转换为灰度图像。)
BufferedImage image1 = new BufferedImage(width, height,BufferedImage.TYPE_BYTE_GRAY);
Graphics graphics = image1.getGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();
File outputFile = new File(date1);
ImageIO.write(image1, "png", outputFile);
存在颜色 space 转换问题。您可以手动将输出图像的每个像素转换为灰度,并这样设置输出图像的像素:
int gray = red * 0.299 + green * 0.587 + blue * 0.114
或使用 ColorConvertOp class 为您进行转换:
BufferedImage in = ImageIO.read(inputFile);
BufferedImage out = new BufferedImage(in.getWidth(), in.getHeight(), BufferedImage.TYPE_INT_ARGB);
ColorConvertOp op = new ColorConvertOp(in.getColorModel().getColorSpace(), ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
op.filter(in, out);
ImageIO.write(out, "png", outputFile);