前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java---将图片置灰

Java---将图片置灰

作者头像
IT云清
发布2019-01-22 10:31:40
7170
发布2019-01-22 10:31:40
举报
文章被收录于专栏:IT云清IT云清
代码语言:javascript
复制
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;
	}
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档