1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #include <graphics.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> struct Node { int x; int y; struct Node* next; }; void fill (int pt[][2], int clr); void floodfill4 (int x, int y, int oldclr, int newclr); void insert (int x, int y, struct Node** last); void main() { int i, j; int pt[3][2]; int clr; printf ("This program demonstrates filling a polygon.\n"); printf ("Enter the x- and y-coordinates for three points:\n"); for (i=0; i<3; i++) for (j=0; j<2; j++) scanf ("%d", &pt[i][j]); printf ("Enter the fill-colour: (Any number from 1 to 14) "); scanf ("%d", &clr); fill (pt, clr); } void fill (int pt[][2], int clr) { int gd = DETECT, gm; int seedx, seedy; initgraph (&gd, &gm, "..\\bgi"); setcolor (WHITE); line (pt[0][0], pt[0][1], pt[1][0], pt[1][1]); line (pt[1][0], pt[1][1], pt[2][0], pt[2][1]); line (pt[2][0], pt[2][1], pt[0][0], pt[0][1]); getch(); seedx = (pt[0][0] + pt[1][0] + pt[2][0]) / 3; seedy = (pt[0][1] + pt[1][1] + pt[2][1]) / 3; floodfill4 (seedx, seedy, BLACK, clr); getch(); closegraph(); return; } void floodfill4 (int x, int y, int oldclr, int newclr) { struct Node* first, *last, *tmp; first = (struct Node*) malloc (sizeof (struct Node)); if (first == NULL) { closegraph(); fprintf (stderr, "floodfill4: Out of memory.\n"); exit (2); } if (oldclr == newclr) { free (first); return; } first->x = x; first->y = y; first->next = NULL; last = first; while (first != NULL) { putpixel (x, y, newclr); if (getpixel (x, y-1) == oldclr) { putpixel (x, y-1, newclr); insert (x, y-1, &last); } if (getpixel (x, y+1) == oldclr) { putpixel (x, y+1, newclr); insert (x, y+1, &last); } if (getpixel (x-1, y) == oldclr) { putpixel (x-1, y, newclr); insert (x-1, y, &last); } if (getpixel (x+1, y) == oldclr) { putpixel (x+1, y, newclr); insert (x+1, y, &last); } tmp = first; first = first->next; x = first->x; y = first->y; free (tmp); } } void insert (int x, int y, struct Node** last) { struct Node* p; p = (struct Node*) malloc (sizeof (struct Node)); if (p == NULL) { closegraph(); fprintf (stderr, "\n insert: Out of memory.\n"); exit (2); } p->x = x; p->y = y; p->next = NULL; (*last)->next = p; *last = (*last)->next; } |
Description :
This is the one stop educational site for all Electronic and Computer students. If you want to learn something new then we are here to help. We work on Microcontroller projects, Basic Electronics, Digital electronics, Computer projects and also in basic c/c++ programs.
#Home #Sitemap #Resources #Terms of Use
Copyright©2012 electrofriends.com All Rights Reserved
Contact:info@electrofriends.com
need some explanation, please
That is not a scan-line filling algorithm. It is a flood fill algorithm. If you are going to rip the code off of another site at least label it correctly.