Реализовать модуль загрузки, сохранения и обработки изображений.
Базовый формат изображения: BMP, RGB, 24 бита на точку, 8 бит на канал. Поддержка других форматов - по желанию.
Функциональность:
Примерный интерфейс модуля:
typedef struct _tRGB {
unsigned char b, g, r;
} RGB;
typedef struct _tImage {
/* ... */
} Image;
Image * img_create(void);
void img_destroy(Image * pimg);
int img_load(Image * pimg, const char * filename);
int img_save(Image * pimg, const char * filename);
int img_resize(Image * pimg, unsigned height, unsigned width);
int img_crop(Image * pimg, int left, right top, int right, right bottom);
int img_draw_point(Image * pimg, unsigned x, unsigned y, RGB color);
int img_draw_line(Image * pimg, unsigned x1, unsigned y1,
unsigned x2, unsigned y2, RGB color);
/* и т.д. ... */
Для демонстрации функциональности написать программу, которая считывает изображение из файла, предоставляет пользователю возможность модифицировать загруженное изображение, сохраняет результат в другой файл.
Пример работы с программой (выделенное курсивом - ввод пользователя):
imged test.bmp result.bmp Loaded BMP, W:105, H:35 > resize 100 64 Resizing (105, 35) -> (100, 64) > height 128 Resizing (100, 64) -> (200, 128) > point 100 64 Point (100, 64): RGB(255, 0, 255) > save Saving BMP, W:200, H:128 -> "result.bmp" > point 100 64 0 255 0 Draw point (100, 64), RGB(0, 255, 0) > line 100 64 0 0 255 255 255 Draw line (100, 64)--(0, 0), RGB(255, 255, 255) > exit Saving BMP, W:200, H:128 -> "result.bmp"