将彩色图像转换为灰度显示在java中的黑色图像

时间:2015-03-24 17:46:24

标签: java bufferedimage grayscale

我正在尝试使用Java将图像转换为灰度图像。这里的问题是,当我试图在转换成灰度后保存该图像时,它显示黑色图像。我几乎没有意识到这种图像转换。我想知道为什么它不起作用,你的答案将帮助我完成我的项目。谢谢。

BufferedImage image = ImageIO.read(fileContent);
File outputFile = new File(date1);
ImageIO.write(image1, "png", outputFile);  

(这是从html页面获得的彩色图像,它工作正常。当我试图显示/保存此图像时,彩色图像是可见的。但是当下面的代码用于转换颜色时出现问题图像到灰度图像。)

     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);  

1 个答案:

答案 0 :(得分:1)

存在色彩空间转换问题。您可以手动将输出图像的每个像素转换为灰度,并以这种方式设置输出图像的像素:

int gray = red * 0.299 + green * 0.587 + blue * 0.114

或使用ColorConvertOp类为您进行转换:

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);