c语言填充算法

楼主问的是图形算法。。一楼给什么??

对,我之前写过一个多边形种子填充算法,用的是贝塞尔方法。看一看。。

1由Bresenham直线和圆组成的扇形

void CFill4Dlg::Bresenham(int x0,int y0,int x1,int y1,int color)

{

int x,y,dx,dy,e;

dx = yx0;

dy = yy0;

e =-dx;

x = x0

y = y0

CClientDC dc(这个);

for(x = x0;xx1x)

{

华盛顿。SetPixel(x,(int)(y 0.5),color);

e = E2 * dy;

如果(e=0)

{

y;

e = e-2 * dx;

}

}

}

void cfill 4 DLG::circle points(int x,int y,int m,int n,int color)

{

CClientDC dc(这个);

华盛顿。SetPixel(x m_cx,y m_cy,color);

华盛顿。SetPixel(y m_cx,x m_cy,color);

华盛顿。SetPixel(-x m_cx,y m_cy,color);

华盛顿。SetPixel(y m_cx,-x m_cy,color);

华盛顿。SetPixel(x m_cx,-y m_cy,color);

华盛顿。SetPixel(-y m_cx,x m_cy,color);

华盛顿。SetPixel(-x m_cx,-y m_cy,color);

华盛顿。SetPixel(-y m_cx,-x m_cy,color);

}

void cfill 4 DLG::midpoint circle(int r,int m,int n,int color)

{

int x,y;

浮动d;

x = 0;

y = r;

d = float(1.25-r);

圆形点(x,y,m,n,颜色);

while(x=y)

{

如果(d0)

d = 2 * x 3;

其他

{

d = 2 *(x-y)5;

y-;

}

x;

圆形点(x,y,m,n,颜色);

}

}

2填充:

种子设置filled _ color = getpixel (m _ zx,m _ zy);

typedef结构

{//记录种子点

int x;

int y;

}种子;

seed * seed _ p;

#定义堆栈总计3000

void stack _ init();

void setstackempty();

void stackpush(种子pt);

seed stack pop();

bool isstacksempty();

int堆栈编号;

填充:

void CFill4Dlg::FloodFill4(int x,int y,int oldcolor,int newcolor)

{

CClientDC dc(这个);

if((int)dc。GetPixel(x,y)==oldcolor)

{

drawpixel(x,y,new color);

FloodFill4(x,y 1,oldcolor,new color);

FloodFill4(x,y-1,oldcolor,new color);

FloodFill4(x-1,y,oldcolor,new color);

FloodFill4(x 1,y,oldcolor,new color);

}

}

void CFill4Dlg::drawpixel(int x,int y,int color)

{

CClientDC dc(这个);

华盛顿。SetPixel(x,y,color);

}

1位填充和删除算法(C语言实现) Int input() //写这个函数按顺序逐个读取位,返回0,1和-1,其中-1表示到文件末尾。

//然后申请一个足够大的地址来写数据。

Int insert(int) //用这个函数写数据。

//逻辑代码如下

int结果= input();

int count = 5;

while(结果!= -1)

{

插入(结果);

if(结果== 1)

count-;

其他

计数= 5;

if(count == 0)

{

插入(0);

计数= 5;

}

}

c语言中的矩形填充算法 #包含stdio.h

#包含图形. h

typedef结构{

int xmin,xmax,ymin,ymax

}长方形;

void fill Rectangle(Rectangle * rect,int color) {

int x = 0,y = 0;

for(y = rect-ymin;y = rect-ymax;y)

for(x = rect-xmin;x = rect-xmax;x)//这里有个分号,要去掉。

putpixel(x,y,color);

}/* fill rectangle()的结尾*/

int main() {

//声明我们的颜色

int color = 0;

//声明我们的矩形

Rectangle * rect =(Rectangle *)malloc(size of(Rectangle));

if(NULL == rect)

{

printf("分配内存失败!\ n ");

返回1;

}

//输入范围

printf("输入x-min:\ n ");

scanf("%d ",rect-xmin);

printf("输入x-max:\ n ");

scanf("%d ",rect-xmax);

printf("输入y-min:\ n ");

scanf("%d ",rect-ymin);

printf("输入y-max:\ n ");

scanf("%d ",rect-ymax);

//输入颜色

printf("输入您的颜色:\ n ");

scanf("%d ",颜色);

//调用我们的paint函数

FillRectangle(rect,color);

返回0;

}

找一个用C语言实现的种子填充多边形算法的程序。 /*如果用线填充,过程如下。如果是用点填充,需要使用堆栈和系统底层库函数或者使用点绘制函数putpixel()。下面的例子是用扫描线填充矩形。首先需要输入矩形的左上顶点和右下顶点的坐标以及填充扫描线的间距(=1)。如果间距等于1,则完全填充(真实填充)。一个完整的C程序如下,程序已经在win-tc和tc2.0下调试完毕. */# includestddio . h # includestdlib . h # include conio . h # includegraphics . h void draw(int x1,int y1,int x2,int y2,int delta) {int nx1,ny1,nx2,ny2nx1=x1,ny1=y2-delta,nx2=x1 delta,ny2 = y2while((ny1 = y1)(nx2 = x2)){ line(nx1,ny1,nx2,ny2);ny= delta;nx2 = delta} if(nx2x 2){ ny2-= nx2-x2;nx2 = x2while(ny1y1) {line(nx1,ny1,nx2,ny2);ny= delta;ny2-= delta;} nx1 = yny1;ny1 = y1while(nx1x2) {line(nx1,ny1,nx2,ny2);nx1 = deltany2-= delta;} } else { nx1 = yny1;ny1 = y1while(nx2x2) {line(nx1,ny1,nx2,ny2);nx2 = deltanx1 = delta} ny2-= nx2-x2;nx2 = x2while(ny2y1) {line(nx1,ny1,nx2,ny2);ny2-= delta;nx1 = delta} } } int main(void) {int x1,y1,y2,x2,deltaint driver=DETECT,modeprintf("请输入矩形的左上(x1,y1)和右下(x2,y2)和delta:\ n ");scanf("%d%d%d%d%d ",x1,y1,x2,y2,delta);initgraph(驱动程序,模式,“C:\ \ TC”);/* Here */ rectangle(x1,y1,x2,y2);draw(x1,y1,x2,y2,delta);gotoxy(1,1);printf("按任意键退出!");getch();closegraph();返回0;}/*描述:在main()函数中更改initgraph(gdriver,gmode," ");将中的“”更改为您的tc安装目录。一般TC必须安装在c盘的根目录下,所以是initgraph (gdriver,gmode," C:\ \ TC ");如果你的TC安装目录是D盘的Tools目录下的TC目录,那么上面的语句改为:initgraph (gdriver,gmode," D:\ \ Tools \ \ TC ");同时,确保存在文件EGAVGA。BGI在D:\\Tools\\TC目录下。如果它不起作用,把这个程序复制到你的TC安装目录,然后再运行一次。*/

急需一个用C语言写的扫描线填充多边形的算法。 这是本书第99页的摘录。试试看!

#定义SET_BIT_MACRO( a,b ) if( image[a][b] == HIGH){ \

图像[a][b] =颜色;cnt}

/**

*图像:图像阵列

* xs,ys:起始位置

*颜色:匹配的颜色。

*/

void pixelset(无符号字符图像[Y_SIZE][X_SIZE],int xs,int ys,int color){

int i,j,cnt,im,ip,jm,jp;

image[ys][xs]= color;

while( cnt!= 0 ){

CNT = 0;

for(I = 0;i Y _ SIZEi ){

for(j = 0;j X _ SIZEj ){

if(image[i][j]==color){

im = I-1;IP = I 1;JM = j-1;jp = J1;

if(im 0)im = 0;if(ipY _ SIZE-1)IP = Y _ SIZE-1;

if(JM 0)JM = 0;if(jpX _ SIZE-1)jp = X _ SIZE-1;

//环顾八个方向。

SET_BIT_MACRO(图像[i][jp])

SET_BIT_MACRO(图像[im][jp])

SET_BIT_MACRO( image[im][j])

SET_BIT_MACRO( image[im][jm])

SET_BIT_MACRO( image[i][jm])

SET_BIT_MACRO( image[ip][jm])

SET_BIT_MACRO( image[ip][j])

SET_BIT_MACRO( image[ip][jp])

}

}

}

}

}

相关文章

发表新评论