您的位置:首页 > 其它

实现图片编辑软件的“填充颜色”功能

2014-11-17 11:22 253 查看
题目:《程序员面试金典(第5版)》P232

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

提示:以一个二维整数数组matrix模拟屏幕,每一个整数值代表一种颜色。

void PaintFillCore(vector<vector<int>> &matrix,int x,int y,int before,int color)
{
	if(x<0 || x>=matrix.size() || y<0 || y>=matrix[0].size() || color==matrix[x][y] || before!=matrix[x][y])
		return;
	matrix[x][y]=color;
	//和一个点相邻的点最多可以有八个,需要改变颜色的点最多有八个,这里只挑选上下左右4个点进行变化即可。
	PaintFillCore(matrix,x-1,y,before,color);//上
	PaintFillCore(matrix,x+1,y,before,color);//下
	PaintFillCore(matrix,x,y-1,before,color);//左
	PaintFillCore(matrix,x,y+1,before,color);//右
}

//matrix为代表屏幕的二维数组,x为点的行号,y为点的列号,color为新的颜色值
void PaintFill(vector<vector<int>> &matrix,int x,int y,int color)
{
	//若输入的二维数组和行号列号不合法,则返回。若该点的颜色值和新的颜色值一致,则返回。
	if(matrix.empty() || matrix[0].empty() || x<0 || x>=matrix.size() || y<0 || y>=matrix[0].size() || color==matrix[x][y])
		return;
	int before=matrix[x][y];
	matrix[x][y]=color;
	//和一个点相邻的点最多可以有八个,需要改变颜色的点最多有八个,这里只挑选上下左右4个点进行变化即可。
	PaintFillCore(matrix,x-1,y,before,color);//上
	PaintFillCore(matrix,x+1,y,before,color);//下
	PaintFillCore(matrix,x,y-1,before,color);//左
	PaintFillCore(matrix,x,y+1,before,color);//右
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐