Разработать две консольные утилиты: для конвертации BMP изображений в негатив и для попиксельного сравнения двух BMP изображений.
- Написана библиотека
bmp, которая состоит из необходимых для реализации утилит функций по работе с BMP изображениями (чтение, запись и т.д.), и на основе этой библиотеки сделаны две утилиты:converterиcomparer.- Поддерживаются два формата BMP: 8bit и 24bit.
- Поддерживается только
BITMAPINFOHEADERс размером header’а 40 байтов.
- Валидирован пользовательский ввод на предмет отсутствующих, лишних, или неверных аргументов. В случае ошибки выводится внятное и осмысленное сообщение в стандартный поток ошибок.
- Код отлажен с помощью Address Sanitizer и Valgrind.
Утилита считывает изображение из файла, конвертирует его в негатив и записывает в другой файл. Преобразование 8bit изображений осуществляется путем инвертирования таблицы цветов, 24bit изображений – путем попиксельного инвертирования. Пути до входного и выходного файла передаются через аргументы командной строки.
converter input.bmp output.bmp0— изображение успешно сконвертировано.1— некорректные аргументы командной строки, неподдерживаемый формат, ошибки, которые относятся к структуре изображения и иные ошибки. В случае ошибки выводится сообщение в стандартный поток ошибок.
Утилита считывает два изображения из файлов и производит попиксельное сравнение. Пути до файлов передаются через аргументы командной строки.
-
Если изображения попиксельно совпадают (Код возврата:
0), выводится сообщениеImages are sameв стандартный поток вывода. -
Если изображения различны (Код возврата:
2), выводится в стандартный поток ошибок координаты первых 100 различающихся пикселей. -
Если сравнение невозможно в принципе (Код возврата:
1), например, не совпадают длины или высоты, не совпадают форматы и т.д., то выводится сообщение в стандартный поток ошибок.
Специальные случаи:
- Изображения, отличающиеся лишь порядком хранения пикселей, считаются совпадающими.
- Изображения, отличающиеся лишь способом хранения цвета пикселей, считаются совпадающими.
- Изображения разной битности всегда считаются несовпадающими.
Использование имеет следующий вид, вызов через командную строку:
comparer image1.bmp image2.bmp0— изображения совпадают.1— некорректные аргументы командной строки, изображения несравнимы, неподдерживаемый формат, ошибки, которые относятся к структуре изображения и иные ошибки. Также необходимо вывести внятное сообщение о случившейся ошибке в стандартный поток ошибок.2— изображения не совпадают.- Других кодов возврата быть не должно.