首页 > Java基础 > Java图像变灰

Java图像变灰

2012年7月16日 发表评论 阅读评论

        项目中出现使用java完成图像灰度的场景,之前没有了解过这方面的知识,后续经历几番周折,终于告破,先把实现代码贴一下,后续讲解一下核心类,代码如下:

String  srcFileName="x:\\dd\\test.jpg";//源图像路径
String  destFileName="x:\\dd\\test.jpg";//源图像路径
BufferedImage originalPic = ImageIO.read(new FileInputStream(srcFileName));

int imageWidth = originalPic.getWidth();
int imageHeight = originalPic.getHeight();
//产生新的图像缓冲对象
BufferedImage newBufferedImage = new BufferedImage(imageWidth, imageHeight,
  BufferedImage.TYPE_3BYTE_BGR);
//颜色转换(黑白)
ColorConvertOp cco = new ColorConvertOp(ColorSpace
  .getInstance(ColorSpace.CS_GRAY), null);
cco.filter(originalPic, newBufferedImage);

FileOutputStream fos = new FileOutputStream(destFileName);
if (destFileName.toLowerCase().endsWith(".gif")) {
 ImageIO.write(newBufferedImage, "gif", fos);
}
if (destFileName.toLowerCase().endsWith(".png")) {
 ImageIO.write(newBufferedImage, "png", fos);
}
//针对jpeg、jpg设置输出编码
if ((destFileName.toLowerCase().endsWith(".jpg"))
  || (destFileName.toLowerCase().endsWith(".jpeg"))) {
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(newBufferedImage);
 param.setQuality(1.0F, false);
 encoder.encode(newBufferedImage);
}
fos.flush();
fos.close();

核心类分析如下:
ColorSpace:
1.用做一个颜色空间标记,标识 Color 对象的特定颜色空间。
2.将指定颜色空间中的颜色与 sRGB 和定义良好的 CIEXYZ 颜色空间中的颜色进行相互转换的方法。

ColorConvertOp
颜色转换操作类。它的作用就是将一个颜色模式的图片转换为另一个颜色模式的图片

实现原理分析:
ColorConvertOp依赖ColorSpace,ColorConvertOp通过设置颜色空间将一副彩色(RGB)转化为一副新的黑白的灰度图

除非注明,文章为IT热血青年原创,欢迎转载!转载请注明本文地址,谢谢。
本文地址:http://blog.itblood.com/java-colorspace-colorconvertop.html

  1. 2012年7月16日19:09 | #1

    呵呵,看到同行的人真好

  2. 2012年7月26日14:26 | #2

    @小小孩
    可否交换下友情链接

  1. 本文目前尚无任何 trackbacks 和 pingbacks.