Skip to content

spbu-coding-2025/5-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Задача 5

Разработать две консольные утилиты: для конвертации BMP изображений в негатив и для попиксельного сравнения двух BMP изображений.

Общие требования

  • Написать библиотеку bmp, которая будет состоять из необходимых для реализации утилит функций по работе с BMP изображениями (например, чтение, запись и тд), и на основе этой библиотеки сделать две утилиты: converter и comparer.
    • Должны поддерживаться два формата BMP: 8bit и 24bit.
    • Должен поддерживаться только BITMAPINFOHEADER с размером header’а 40 байтов, сжатие поддерживать не надо.
  • Валидировать пользовательский ввод на предмет отсутствующих, лишних, или неверных аргументов. В случае ошибки вывести внятное и осмысленное сообщение в стандартный поток ошибок.
  • Отладить программу с помощью Address Sanitizer и/или Valgrind/Memcheck, решить проблемы работы с указателями и памятью.

Important

Перед тестированием решение будет проверено форматтером clang-format (можно положить конфигурационный файл в репозиторий с решением, тогда будет использован, иначе будет использованы стандартные настройки) и линтером clang-tidy (конфигурационный файл, который будет использован можно посмотреть в репозитории тестирующей системы). Будет использоваться стандартная для runner'а версия инструментов (сейчас это 18.1.3).

Также тестирование будет производиться с использованием ASan и UBSan.

Note

Некоторые поля в заголовках BMP могут конфликтовать с реальным устройством файла (в таком случае считаем изображение некорректным). На такие ситуации есть закрытые тесты.

Converter

Утилита считывает изображение из файла, конвертирует его в негатив и записывает в другой файл. Преобразование 8bit изображений осуществляется путем инвертирования таблицы цветов, 24bit изображений – путем попиксельного инвертирования. Пути до входного и выходного файла передаются через аргументы командной строки.

converter input.bmp output.bmp

Коды возврата:

  • 0 — изображение успешно сконвертировано.
  • 1 — некорректные аргументы командной строки, неподдерживаемый формат, ошибки, которые относятся к структуре изображения и иные ошибки. Также необходимо вывести внятное сообщение о случившейся ошибке в стандартный поток ошибок.
  • Других кодов возврата быть не должно.

Comparer

Утилита считывает два изображения из файлов и производит попиксельное сравнение. Пути до файлов передаются через аргументы командной строки.

  • Если изображения попиксельно совпадают (Код возврата: 0), вывести сообщение Images are same в стандартный поток вывода.
  • Если изображения различны (Код возврата: 2), вывести в стандартный поток ошибок координаты первых 100 различающихся пикселей в следующем формате:
    • Вывести сообщение "Next pixels are different:\n"
    • Выводить пиксели в формате: "x%-6d y%-6d\n"
    • Считаем за начало координат левый нижний угол (координаты не могут быть отрицательными и растут лишь в плюс).
    • Если картинка m пикселей в ширину и n в высоту, то выводим:


X₀ Y₀
X₁ Y₀

Xₘ₋₁ Y₀
X₀ Y₁
X₁ Y₁

  • Если сравнение невозможно в принципе (Код возврата: 1), например, не совпадают длины или высоты, не совпадают форматы и т.д., вывести внятное сообщение о проблеме в стандартный поток ошибок.

Специальные случаи:

  • Изображения, отличающиеся лишь порядком хранения пикселей, считаются совпадающими.
  • Изображения, отличающиеся лишь способом хранения цвета пикселей, считаются совпадающими.
  • Изображения разной битности всегда считаем несовпадающими.

Использование имеет следующий вид, вызов через командную строку:

comparer image1.bmp image2.bmp

Коды возврата:

  • 0 — изображения совпадают.
  • 1 — некорректные аргументы командной строки, изображения несравнимы, неподдерживаемый формат, ошибки, которые относятся к структуре изображения и иные ошибки. Также необходимо вывести внятное сообщение о случившейся ошибке в стандартный поток ошибок.
  • 2 — изображения не совпадают.
  • Других кодов возврата быть не должно.

Работа с GitHub:

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors