【问题标题】:Converting a color image to grayscale is showing black image in java将彩色图像转换为灰度在java中显示黑色图像
【发布时间】:2015-05-28 04:03:47
【问题描述】:

我正在尝试使用 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);  

【问题讨论】:

  • 只是想知道:如果您不包含转换,您的代码是否有效?含义:我会首先尝试让流程向我展示原始图片;当这有效时,您可以考虑拉动您的转化。
  • 最初,当我尝试显示/保存彩色图像时,我可以看到图像,转换后显示的是黑色图像而不是灰度图像。
  • 您能否尝试在JFrame 或类似名称中显示图像,看看问题是转换还是灰度图像的保存问题?使用不同的输出文件格式(如 BMP 或 JPEG)是否重要?
  • JPEG 文件格式在我们尝试图像加密时不是首选。这就是我使用 png 图片的原因。
  • 谢谢。图片有问题。

标签: java bufferedimage grayscale


【解决方案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);

【讨论】:

  • ColorConvertOp 也显示黑色图像作为输出。
  • 你的图片有透明度吗?
  • 透明意味着什么?抱歉,我不知道此图像处理条款。
  • 假设原始图像是 INT_ARGB 类型(或在类型中包含“A”),“A”代表 alpha,它允许其他通道中的颜色是透明的。见en.wikipedia.org/wiki/Alpha_compositing
  • 我在上面编辑了我的答案 - 更改目标图像类型 - 以允许目标图像透明。
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2016-01-11
  • 2015-10-07
  • 1970-01-01
相关资源
最近更新 更多