java将图片黑色变灰色_Java---将图片置灰

package image;

import java.awt.color.ColorSpace;

import java.awt.image.BufferedImage;

import java.awt.image.ColorConvertOp;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.imageio.stream.ImageOutputStream;

public class Demo1 {

public static void main(String[] args) throws Exception {

//图片源文件

String imagePath = "G:\\desk.png";

BufferedImage bufferedImage = ImageIO.read(new FileInputStream(imagePath));

BufferedImage grayImage = getGrayImage(bufferedImage);

//输出目录+输出文件

File out = new File("G:\\TestImage\\wangGray2.png");

ImageIO.write(grayImage, "png",out);

}

/**

* 将图片置灰 --- 使用现成的类

* @param originalImage

* @return

*/

public static BufferedImage getGrayImage(BufferedImage originalImage){

BufferedImage grayImage;

int imageWidth = originalImage.getWidth();

int imageHeight = originalImage.getHeight();

//TYPE_3BYTE_BGR --> 表示一个具有 8 位 RGB 颜色分量的图像,对应于 Windows 风格的 BGR 颜色模型,具有用 3 字节存储的 Blue、Green 和 Red 三种颜色。

grayImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_3BYTE_BGR);

ColorConvertOp cco = new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);

cco.filter(originalImage, grayImage);

return grayImage;

}

/**

* 将图片置灰 --- 手动

* @param originalImage

* @return

*/

public static BufferedImage getGrayImageManual(BufferedImage originalImage){

int green = 0,red = 0,blue = 0,rgb;

int imageWidth = originalImage.getWidth();

int imageHight = originalImage.getHeight();

BufferedImage routeImage = new BufferedImage(imageWidth,imageHight,BufferedImage.TYPE_3BYTE_BGR);

for(int i = originalImage.getMinX();i < imageWidth;i++){

for(int j = originalImage.getMinY();j < imageHight;j++){

//获取该点像素,用Object类型标识

Object data = routeImage.getRaster().getDataElements(i, j,null);

red = routeImage.getColorModel().getRed(data);

green = routeImage.getColorModel().getGreen(data);

blue = routeImage.getColorModel().getBlue(data);

red = (red*3+green*6+blue*1)/10;

green = red;

blue = green;

rgb = (red*256 +green)*256 +blue;

if(rgb>8388608){

rgb = rgb - 256*256*256;

}

//将rgb值写回图片

routeImage.setRGB(i, j, rgb);

}

}

return routeImage;

}

}

本文同步分享在 博客“IT云清”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值