Small C Language Program to show the drawing and filling of some basic shapes like rectangle, circle etc. with colors and different shades. First we created a characters array of patterns that will fill the drawing, then initialize the graphics mode and the draw the shapes.
Note: The graphics.h
library and functions used in this code are specific to the Turbo C compiler. Modern compilers might not support these graphics functions directly. We have re-written the same C source code by using a more modern graphics library called SDL (Simple DirectMedia Layer), which is cross-platform and widely used for multimedia applications, including graphics.
By using graphics.h Library
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 | #include <stdio.h> #include <stdlib.h> #include <graphics.h> int main() { int gd = DETECT, gm, maxx, maxy, x = 40, y = 40, fst; char str[40]; char *pattern[] = { "EMPTY_FILL", "SOLID_FILL", "LTSLASH_FILL", "SLASH_FILL", "BKSLASH_FILL", "LTBKSLASH_FILL", "HATCH_FILL", "XHATCH_FILL", "INTERLEAVE_FILL", "WIDE_DOR_FILL", "CLOSE_DOT_FILL", "USER_FILL" }; initgraph(&gd, &gm, NULL); maxx = getmaxx(); maxy = getmaxy(); rectangle(0, 10, maxx, maxy); setcolor(WHITE); outtextxy(175, 0, "Pre-Defined Fill styles"); for (fst = 0; fst < 12; fst++) { setfillstyle(fst, MAGENTA); bar(x, y, x + 80, y + 80); itoa(fst, str, 10); outtextxy(x, y + 100, str); outtextxy(x, y + 120, pattern[fst]); // Display the fill pattern name x = x + 150; if (x > 490) { y = y + 150; x = 40; } } getch(); closegraph(); return 0; } |
By using SDL Graphics Library
The SDL library provides a different approach to graphics than the traditional BGI graphics. In this example we draw rectangles directly onto the window using the SDL rendering functions. Additionally, SDL does not have built-in text rendering so we used a separate library called SDL_ttf for text rendering, as demonstrated in the code.
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 | #include <stdio.h> #include <stdlib.h> #include <SDL2/SDL.h> void drawRectangle(SDL_Renderer *renderer, int x, int y, int w, int h, Uint8 r, Uint8 g, Uint8 b) { SDL_SetRenderDrawColor(renderer, r, g, b, SDL_ALPHA_OPAQUE); SDL_Rect rect = { x, y, w, h }; SDL_RenderFillRect(renderer, &rect); } int main() { SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow("Pre-Defined Fill Styles", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); int x = 40, y = 40; char str[40]; char *pattern[] = { "EMPTY_FILL", "SOLID_FILL", "LTSLASH_FILL", "SLASH_FILL", "BKSLASH_FILL", "LTBKSLASH_FILL", "HATCH_FILL", "XHATCH_FILL", "INTERLEAVE_FILL", "WIDE_DOR_FILL", "CLOSE_DOT_FILL", "USER_FILL" }; SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); for (int fst = 0; fst < 12; fst++) { drawRectangle(renderer, x, y, 80, 80, 255, 0, 255); sprintf(str, "%d", fst); SDL_Surface* surface = TTF_RenderText_Solid(font, str, (SDL_Color){0, 0, 0, 255}); SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_FreeSurface(surface); SDL_Rect textRect = { x, y + 100, 20, 20 }; SDL_RenderCopy(renderer, texture, NULL, &textRect); surface = TTF_RenderText_Solid(font, pattern[fst], (SDL_Color){0, 0, 0, 255}); texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_FreeSurface(surface); textRect.y += 20; SDL_RenderCopy(renderer, texture, NULL, &textRect); x = x + 150; if (x > 490) { y = y + 150; x = 40; } } SDL_RenderPresent(renderer); SDL_Delay(3000); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } |