Drawing Graphics by using C Programing Language

Drawing Graphics by using C Programing Language

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

#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.

#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;
}
M. Saqib: Saqib is Master-level Senior Software Engineer with over 14 years of experience in designing and developing large-scale software and web applications. He has more than eight years experience of leading software development teams. Saqib provides consultancy to develop software systems and web services for Fortune 500 companies. He has hands-on experience in C/C++ Java, JavaScript, PHP and .NET Technologies. Saqib owns and write contents on mycplus.com since 2004.
Related Post