9.9递归和动态规划(七)——实现许多图片编辑软件都支持的“填充颜色”功能

本文介绍了一种常见的图片编辑功能——填充颜色的实现算法。通过递归地遍历指定颜色的相邻像素并替换为新颜色,实现了从指定起点开始的区域填充。文章详细解释了递归调用的过程,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 功能:实现许多图片编辑软件都支持的“填充颜色”功能。
 * 给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色填入这个店的周围区域,知道原来的颜色值全都改变。

 */


	/**
	 * 思路:假设要对一个像素(比如红色)调用paintFill,即对周围的像素逐一调用paintFill,
	 * 向外扩张,一旦碰到非红色的像素就停止填充。
	 * 
	 * 注意:碰到图像问题,要注意screen[y][x]中x和y的顺序。x表示水平轴(即自左向右),实际上对应于列数,而非行数。y的值等于行数。
	 * @param screen
	 * @param x
	 * @param y
	 * @param ncolor
	 * @return
	 */
	public static boolean paintFill(Color[][] screen,int x,int y,Color ncolor){
		if(screen[y][x]==ncolor)
			return false;
		return paintFill(screen, x, y, screen[y][x], ncolor);
	}
	
	public static boolean paintFill(Color[][] screen,int x,int y,Color ocolor,Color ncolor){
		if(x<0||x>=screen[0].length||y<0||y>=screen.length)
			return false;
		
		if(screen[y][x]==ocolor){
			screen[y][x]=ncolor;
			paintFill(screen, x-1, y, ocolor, ncolor);//左
			paintFill(screen, x+1, y, ocolor, ncolor);//右
			paintFill(screen, x, y-1, ocolor, ncolor);//上!!!
			paintFill(screen, x, y+1, ocolor, ncolor);//下!!!
		}
		return true;
	}

enum Color{
	Black,White,Red,Yellow,Green
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值