下面是乙個簡單的填充效果:
#include
#include
#define filling 1
#define reset 2
typedef struct
line,*pline;
line lines[100];
line line;
static int j=0;
point draw_refresh[1000];
static int l=0;
while(getmessage(&msg,null,0,0))
return msg.wparam;
} lresult callback wndproc(hwnd hwnd,uint message,wparam wparam,lparam lparam)
;point draw[100];
int b=0;
static int filled=0;
for(int e=0;e<100;e++)
int k=0;
int **allest_y=0;
int lardgest_y=0;
int m=0;
int n=0;
int h=0;
int x=0;
int x1=0;
int x2=0;
int y1=0;
int y2=0;
int a=0;
int c=0;
int flag=0;
switch(message)
return 0;
case wm_lbuttonup:
line.xend=loword(lparam);
line.yend=hiword(lparam);
for(i=0;j>=1 && i<=j-1;i++)
else if((line.xend>lines[i].xend-30) && (line.xendlines[i].yend-30) && (line.yendselectobject(hdc,getstockobject(white_pen));//clear the last black line if find a adjacent vetex
movetoex(hdc,line.xstart,line.ystart,null);
lineto(hdc,line.xend,line.yend);
line.xend=lines[i].xend;
line.yend=lines[i].yend;
selectobject(hdc,getstockobject(black_pen));
movetoex(hdc,line.xstart,line.ystart,null);
lineto(hdc,line.xend,line.yend);
releasedc(hwnd,hdc);}}
lines[j].xstart=line.xstart;
lines[j].ystart=line.ystart;
lines[j].xend=line.xend;
lines[j].yend=line.yend;
j++;
line.xstart=0;
line.ystart=0;
line.xend=0;
line.yend=0;
// releasecapture();
return 0;
case wm_command:
switch(loword(wparam))
filled=1;
for(h=0;hlardgest_y)
if(lines[h].yend>lardgest_y)
}for(k=**allest_y;k<=lardgest_y;k++)
else if(klines[m].ystart && lines[n].yend>lines[m].ystart) || (lines[m].yendflag=0;
for(h=0;h}
else if((n!=m) && (lines[m].ystart==lines[n].yend))}}
}else if(lines[m].yend==k)
else if(m!=n && k==lines[n].yend)}}
}else
else if(lines[m].ystartdraw[m].x)}}
hdc=getdc(hwnd); //real filling
for(h=0;hfor(h=0;hb=0;
}break;
case reset:
filled=0;
j=0;
head=lines;
for(int i=0;i<100;i++)
for(h=0;hinvalidaterect(hwnd,null,false);
break;
}return 0;
case wm_paint:
hdc=beginpaint(hwnd,&ps);
for(head=lines;head->xstart!=0 && head->ystart!=0 && head->xend!=0 && head->yend!=0;head++)
head=lines;
if(filled==1)
return defwindowproc(hwnd,message,wparam,lparam);
}///end/
如果你真要執行下的話,請務必在粘進vc的時候把行隔開,因為我暫時還不知道怎麼能以好的格式把**貼進csdn的blog中。我自己做的測試中尚未發現錯誤,如果你發現了,麻煩好心和你告訴我,謝謝你
寒江雪 區域填充演算法 掃瞄線
區域填充遞迴演算法已經領教過了。記憶體消耗大,時間效率低,經典的深搜思想。為了解決這個問題,於是有人提出了種子填充掃瞄線演算法。其實就是深搜不行,換寬搜 bfs 該演算法假設已知其中乙個畫素點,然後從這個畫素點出發,去尋找周圍可以著色的點。這個已知點,我們稱其為種子點。每一輪著色之後,記錄下著色的區...
區域填充之掃瞄線演算法
區域的填充可以根據區域的填充,採用不同的填充演算法,而其中有掃瞄線類演算法和種子填充演算法。這裡,先介紹掃瞄線類演算法之有序邊表的掃瞄線演算法。其他什麼種子填充 邊界標誌演算法 4連通區域的遞迴演算法 8連通區域的遞迴演算法 掃瞄線種子填充演算法比較簡單。其實有序邊表其實領會了也好理解,關鍵是將思想...
多邊形區域填充演算法 掃瞄線種子填充演算法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!1.3掃瞄線種子填充演算法 1.1和1.2節介紹的兩種種子填充演算法的優點是非常簡單,缺點是使用了遞迴演算法,這不但需要大量棧空間來儲存相鄰的點,而且效率不高。為了減少演算法中的遞迴呼叫,節省棧空間的使用,人們提出了很多改進演算法,其中一種就是掃瞄...