Блок задач

4. Структуры данных

Темы
Сложность 4

Задача «Копирование и обрезка изображения»

Разработать программу, которая копирует (copy) одно изображение в другое, предварительно обрезав (crop) его.

Входные данные

Текстовый файл содержащий:

  • Имя исходного файла BM с изображением, которое нужно обрезать и скопировать.
  • Имя результирующего файла BMP с изображением, в которое нужно вставить копируемое изображение.
  • Размеры копируемой области первого изображения
  • координаты точки на втором изображении, в которую необходимо вставить копию.

Пример текстового файла:

copy_and_crop_from.bmp
copy_to.bmp
100, 100, 200, 200 // это координаты прямоугольника (для crop'a)
150, 150 // куда вставлять (левый верхний угол)

Файл может содержать пустые и невалидные строки. Программа должна корректно это обрабатывать.

Передачу имени входного файла реализовать через аргументы командной строки.

Замечания по реализации

  1. Для работы с форматом BMP использовать одну из header-only библиотек.
  2. Если исходные координаты являются некорректными (прямоугольник должен помещаться в исходное изображение), ничего не делать.
  3. Если прямоугольник не помещается в размеры второго BMP-файла, обрезать копируемый участок так, чтобы помещался.

Выходные данные

BMP-файл, содержащий изображение, полученное после выполненной операции обрезки и копирования.

Тестирование

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

Функции ввода/вывода нужно тестировать с помощью std::stringstream. Тестировать работу с изображениями нужно путем самостоятельной генерации изображений, без использования файлов.