Задание № 3334

Студент

Артишевский Кирилл

Задача

Обработка изображений

Состояние

Открыто

Назначено

19.05.2021, 09:34

Обновлено

19.05.2021, 09:35

Реализовать модуль загрузки, сохранения и обработки изображений.

Базовый формат изображения: BMP, RGB, 24 бита на точку, 8 бит на канал. Поддержка других форматов - по желанию.

Функциональность:

  • Загрузка файла с изображением.
  • Запись изображения в файл.
  • Модификация загруженного изображения:
    • изменение размера изображения, кадрирование
    • поворот изображения на +90/180/-90, отражение изображения по вертикали/горизонтали
    • рисование точек
    • рисование линий
    • рисование простых геометрических фигур (как дальнейшее усложнение задания)

Примерный интерфейс модуля:

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"

Действия