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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值