Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <stdio.h>
- #include <math.h>
- #include "glut.h"
- int width = 390, height = 320;
- void PutPixel(int x, int y, int* Color) {
- glBegin(GL_POINTS);
- glColor3ub(Color[0], Color[1], Color[2]);
- glVertex2i(x, y);
- glEnd();
- }
- void DrawLine(int x1, int y1, int x2, int y2, int* Color) {
- int dx, dy, i, e;
- int incx, incy, inc1, inc2;
- int x, y;
- dx = x2 - x1;
- dy = y2 - y1;
- if (dx < 0) dx = -dx;
- if (dy < 0) dy = -dy;
- incx = 1;
- if (x2 < x1) incx = -1;
- incy = 1;
- if (y2 < y1) incy = -1;
- x = x1; y = y1;
- if (dx > dy) {
- PutPixel(x, y, Color);
- e = 2 * dy - dx;
- inc1 = 2 * (dy - dx);
- inc2 = 2 * dy;
- for (i = 0; i<dx; i++) {
- if (e >= 0) {
- y += incy;
- e += inc1;
- }
- else
- e += inc2;
- x += incx;
- PutPixel(x, y, Color);
- }
- }
- else {
- PutPixel(x, y, Color);
- e = 2 * dx - dy;
- inc1 = 2 * (dx - dy);
- inc2 = 2 * dx;
- for (i = 0; i<dy; i++) {
- if (e >= 0) {
- x += incx;
- e += inc1;
- }
- else
- e += inc2;
- y += incy;
- PutPixel(x, y, Color);
- }
- }
- }
- void Fill(int x, int y);
- int Color[3] = { 239,202,193 };
- int BorderColor[3] = { 209,172,163 };
- void Display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT);
- DrawLine(100, 100, 100, 120, BorderColor);
- DrawLine(100, 120, 80, 120, BorderColor);
- DrawLine(80, 120, 80, 200, BorderColor);
- DrawLine(80, 200, 100, 200, BorderColor);
- DrawLine(100, 200, 100, 220, BorderColor);
- DrawLine(100, 220, 280, 220, BorderColor);
- DrawLine(280, 220, 280, 200, BorderColor);
- DrawLine(280, 200, 300, 200, BorderColor);
- DrawLine(300, 200, 300, 120, BorderColor);
- DrawLine(300, 120, 280, 120, BorderColor);
- DrawLine(280, 120, 280, 100, BorderColor);
- DrawLine(280, 100, 100, 100, BorderColor);
- Fill(101, 100);
- glFlush();
- }
- bool compaireColors(int mas1[], int mas2[])
- {
- for (int i = 0; i < 3; i++)
- if (mas1[i] != mas2[i])
- return false;
- return true;
- }
- int* getpixel(int x, int y)
- {
- unsigned char pixel[4];
- glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
- int* colors = new int[3];
- colors[0] = pixel[0];
- colors[1] = pixel[1];
- colors[2] = pixel[2];
- return colors;
- }
- int LineFill(int x, int y, int dir, int PrevXl, int PrevXr)
- {
- int xl = x;
- int xr = x;
- int* c;
- do {
- c = getpixel(--xl, y);
- }
- while ((!compaireColors(c, BorderColor)) && (!compaireColors(c, Color)));
- do {
- c = getpixel(++xr, y);
- }
- while ((!compaireColors(c, BorderColor)) && (!compaireColors(c, Color)));
- xl++; xr--;
- DrawLine(xl, y, xr, y, Color);
- for (x = xl; x <= xr; x++)
- {
- c = getpixel(x, y + dir);
- if ((!compaireColors(c, BorderColor)) && (!compaireColors(c, Color))) x = LineFill(x, y + dir, dir, xl, xr);
- }
- for (x = xl; x<PrevXl; x++)
- {
- c = getpixel(x, y - dir);
- if ((!compaireColors(c, BorderColor)) && (!compaireColors(c, Color))) x = LineFill(x, y - dir, -dir, xl, xr);
- }
- for (x = PrevXr; x<xr; x++)
- {
- c = getpixel(x, y - dir);
- if ((!compaireColors(c, BorderColor)) && (!compaireColors(c, Color))) x = LineFill(x, y - dir, -dir, xl, xr);
- }
- return xr;
- }
- void Fill(int x, int y)
- {
- LineFill(x, y, 1, x, x);
- }
- void Init()
- {
- glClearColor(1.0f, 0.941f, 0.913f, 1.0f);
- gluOrtho2D(0, width, 0, height);
- }
- void main(int argc, char **argv)
- {
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
- glutInitWindowPosition(0, 0);
- glutInitWindowSize(width, height);
- glutCreateWindow("Fill");
- Init();
- glutDisplayFunc(Display);
- glutMainLoop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement