将彩色图像转换为灰度图像在 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);