Search
Pro učitele: 12
Na tomto cvičení spojíme několik předcházejících témat (dynamická alokace paměti, práce se soubory, pointerová aritmetika, ukazatele na funkce, atd.) v jednom komplexním programu.
Vytvořte knihovnu pro práci s bitmapami (bitmap_utils.c, bitmap_utils.h). Tato knihovna umožní vytvořit bitmapu o zadané velikosti v paměti, kreslit do ní jednotlivé pixely a čáry zadanou barvou a exportovat tuto bitmapu ve formátu BMP.
bitmap_utils.c
bitmap_utils.h
Toto jsou povinné funkce knihovny “bitmap_utils”:
t_bitmap *create_bitmap(uint16_t width, uint16_t height); void delete_bitmap(t_bitmap *bitmap); void set_color(uint8_t r, uint8_t g, uint8_t b); void draw_pixel(t_bitmap *bitmap, uint16_t x, uint16_t y); void draw_line(t_bitmap *bitmap, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); int export_bitmap_to_bmp(char *filename, t_bitmap *bitmap);
Typy unit16_t, uint8_t najdete v inttypes.h. Datový typ t_bitmap navrhněte dle vlastního uvážení.
unit16_t
uint8_t
inttypes.h
t_bitmap
Dále vytvořte funkci plot, která do zadané bitmapy vykreslí graf funkce (tuto funkci předávejte jako ukazatel) v zadaných mezích (rozsah osy x a y).
plot
Testovací hlavní program:
#include <stdio.h> #include <stdlib.h> #include <math.h> #include "bitmap_utils.h" #define WIDTH 320 #define HEIGHT 200 double function1(double x) { return sin(x); } double function2(double x) { return sin(x) * sin(x); } void plot(t_bitmap *bitmap, /* DOPLŇTE */, double x_min, double x_max, double y_min, double y_max) { /* DOPLŇTE VLASTNÍ KÓD */ } int main(int argc, char** argv) { t_bitmap* bitmap; int x, y; bitmap = create_bitmap(WIDTH, HEIGHT); set_color(255, 255, 255); // White color for (x = 0; x < WIDTH; x++) { for (y = 0; y < HEIGHT; y++) { draw_pixel(bitmap, x, y); } } set_color(0, 0, 0); // White color plot(bitmap, &function1, 0, 2 * M_PI, -1, 1); export_bitmap_to_bmp("out1.bmp", bitmap); set_color(255, 0, 0); // Red color plot(bitmap, &function2, 0, 2 * M_PI, -1, 1); export_bitmap_to_bmp("out2.bmp", bitmap); set_color(0, 255, 0); // Green color plot(bitmap, &function2, 0, 10 * M_PI, -1, 1); export_bitmap_to_bmp("out3.bmp", bitmap); set_color(0, 0, 255); // Blue color plot(bitmap, &function2, 0, 10 * M_PI, 0, 1); export_bitmap_to_bmp("out4.bmp", bitmap); delete_bitmap(bitmap); return (EXIT_SUCCESS); }
Tento program by měl vygenerovat následující obrázky: