Skip to content

vilfilll/cpp-image-converter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

C++ Image Converter

Консольное приложение на C++17 для конвертации изображений между форматами JPEG, PPM и BMP.

Проект реализован в виде приложения и отдельной библиотеки ImgLib, обеспечивающей единый интерфейс для работы с изображениями и возможность расширения новыми форматами.

Возможности

Работа с изображениями

  • конвертация изображений между форматами:

    • .jpg / .jpeg
    • .ppm
    • .bmp
  • автоматическое определение формата по расширению файла;

  • загрузка изображения в единое внутреннее представление;

  • сохранение изображения в целевом формате.

Архитектура

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

Надёжность

  • обработка ошибок загрузки и сохранения;
  • понятные коды завершения;
  • проверка пользовательских аргументов.

Стек

Язык

  • C++17

Библиотеки

  • ImgLib
  • libjpeg

Сборка

  • CMake 3.11+

Архитектура

Проект разделён на приложение и библиотеку обработки изображений:

Input File
      ↓

ImageFormatInterface
      ↓

┌────────────────┐
│ JPEG Module    │
├────────────────┤
│ PPM Module     │
├────────────────┤
│ BMP Module     │
└────────────────┘

      ↓

img_lib::Image

      ↓

Output File

Алгоритм работы:

  1. приложение получает входной и выходной файл;
  2. определяет формат по расширению;
  3. выбирает реализацию ImageFormatInterface;
  4. загружает изображение в img_lib::Image;
  5. сохраняет данные в целевом формате.

Добавление нового формата требует реализации нового обработчика и его подключения к механизму выбора формата.


Структура проекта

ImgConverter/
│
├── ImgConverter/
│   └── main.cpp
│
└── ImgLib/
    │
    ├── img_lib.*
    │   ├── Image
    │   └── Color
    │
    ├── ppm_image.*
    ├── bmp_image.*
    └── jpeg_image.*

Сборка

Требования

  • CMake >= 3.11
  • Компилятор с поддержкой C++17
  • libjpeg

Build

cmake -S . -B build \
-DLIBJPEG_DIR="C:/path/to/libjpeg"

cmake --build build --config Release

Запуск

./build/Release/imgconv input.jpg output.bmp

Использование

Формат команды:

imgconv <input_file> <output_file>

Примеры:

imgconv photo.jpg photo.ppm

imgconv frame.bmp frame.jpeg

imgconv image.ppm image.bmp

Коды завершения

Код Описание
0 успешное завершение
1 неверные аргументы запуска
2 неизвестный формат входного файла
3 неизвестный формат выходного файла
4 ошибка загрузки
5 ошибка сохранения

Используемые концепции

  • интерфейсы и полиморфизм;
  • работа с бинарными форматами;
  • проектирование модульной архитектуры;
  • интеграция внешних библиотек;
  • разделение приложения и библиотеки.

About

Конвертер изображений

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors