美图秀秀之局部彩色功能

面向对象设计的老师要我们每个人用写个不少于一万行代码的项目。开始还是想写游戏来着,毕竟写游戏算是轻车熟路,但是老师又规定只能用java写,算了,用java写游戏似乎不太明智。写什么玩意好呢。颠来倒去想了好久。算了,既然现阶段是做图像处理方面的,那就做个类似美图秀秀之类的玩意吧。(虽然用java做图像也必将非主流,不过也不管那么多了)。

其实写这篇博客的时候,我的代码已经凑够一万行了。项目算不上什么创新,最多只是对一些小算法的模仿罢了。我也不知道为什么要先写局部彩色功能,可能是因为毕竟简单吧。


局部彩色呢,原理其实很简单,先由原图生成一张灰度图。再将被擦除的部分用原图替换过来。


1.生成灰度图。这个很简单,不多废话。

2.用鼠标涂抹。每次涂抹,就将以涂抹点为圆心,画笔大小为擦除半径的圆内的像素替换为彩色图上对应点的像素值。


	/**
	 * 擦除应用在源图片上的效果(圆形区域)
	 * 
	 * @param currImage
	 *            当前图片
	 * @param sourceImage
	 *            原图片
	 * @param centerX
	 *            擦除的中心点X坐标
	 * @param centerY
	 *            擦除的中心点Y坐标
	 * @param radius
	 *            擦除的半径
	 * */
	public static BufferedImage getImage(BufferedImage currImage, BufferedImage sourceImage, int centerX, int centerY, int radius)
	{
		int startX = centerX - radius;
		int startY = centerY - radius;
		int endX = centerX + radius;
		int endY = centerY + radius;

		startX = startX < 0 ? 0 : startX;
		startY = startY < 0 ? 0 : startY;
		endX = endX > currImage.getWidth() ? currImage.getWidth() : endX;
		endY = endY > currImage.getHeight() ? currImage.getHeight() : endY;

		for (int y = startY; y < endY; y++)
		{
			for (int x = startX; x < endX; x++)
			{
				if (Geometry.getDistance(x, y, centerX, centerY) < radius)
				{
					currImage.setRGB(x, y, sourceImage.getRGB(x, y));
				}
			}
		}
		return currImage;

	}


效果:

原图

灰度图


局部彩色



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值