Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы и курсачи 2022-2023 / 2 сем / Baraeva_Elizaveta_cw.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
8 Мб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра МО ЭВМ

Курсовая РАБОТА

по дисциплине «Программирование»

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

Студентка гр. 2383

Бараева Е.Н.

Преподаватель

Азаревич А.Д.

Санкт-Петербург

2023

ЗАДАНИЕ

на курсовую работу

Студентка Бараева Е.Н.

Группа 2383

Тема работы: Работа с изображениями в языке Си

Исходные данные:

Программа должна иметь CLI или GUI.

Программа должна реализовывать весь следующий функционал по обработке png-файла

Общие сведения

  • Формат картинки PNG

  • без сжатия

  • файл всегда соответствует формату PNG

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

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

Программа должна реализовывать следующий функционал по обработке PNG-файла

(1) Рисование окружности. Окружность определяется:

  • либо координатами левого верхнего и правого нижнего угла квадрата, в который она вписана, либо координатами ее центра и радиусом

  • толщиной линии окружности

  • цветом линии окружности

  • окружность может быть залитой или нет

  • цветом которым залита сама окружность, если пользователем выбрана залитая окружность

(2) Фильтр rgb-компонент. Этот инструмент должен позволять для всего изображения либо установить в 0 либо установить в 255 значение заданной компоненты. Функционал определяется

  • Какую компоненту требуется изменить

  • В какой значение ее требуется изменить

(3) Разделяет изображение на N*M частей. Реализация: либо провести линии заданной толщины, тем самым разделив изображение либо сохранение каждой части в отдельный файл. -- по желанию студента (можно и оба варианта). Функционал определяется:

  • Количество частей по “оси” Y

  • Количество частей по “оси” X

  • Толщина линии

  • Цвет линии

  • Либо путь куда сохранить кусочки

Содержание пояснительной записки:

Содержание, Введение, Реализация, Примеры, Заключение, Список использованных источников, Приложение А.

Предполагаемый объем пояснительной записки:

Не менее 10 страниц.

Дата выдачи задания: 22.03.2023

Дата сдачи реферата: 17.05.2023

Дата защиты реферата: 19.05.2023

Студентка

Бараева Е.Н.

Преподаватель

Азаревич А.Д.

Аннотация

В данной курсовой работе были рассмотрены методы обработки изображений формата PNG. Реализованная программа работает изображениями без сжатия, с глубиной цвета 8 бит. Пользователь взаимодействует с программой с помощью CLI, который был написан с помощью библиотеки getopt.h. В программе предусмотрена обработка некорректных входных данных, возможность вывода подробной информации о PNG файле.

Содержание

Введение

7

1.

Реализация

8

1.1.

Рисование окружности

8

1.2.

Наложение фильтра

9

1.3.

Разделение изображения на части

9

1.4.

Взаимодействие с программой

9

1.5.

Дополнительные функции

11

1.6.

Соглашение

11

2.

Примеры

13

Заключение

17

Список использованных источников

18

Приложение А. Исходный код программы

19

Введение

Цель работы.

Целью данной работы является создание программы на языке Си, которая обрабатывает изображения формата PNG в зависимости от поданных аргументов.

Задачи.

Для достижения поставленной цели требуется решить следующие задачи: освоить работу с библиотекой getopt.h и libpng; научиться исправлять проблемы, которые могут возникнуть при некорректном вводе пользователем; научиться работать с изображениями формата PNG; научиться правильно считывать и записывать данные из файла и в файл.

1. Реализация

1.1. Рисование окружности

1.1.1) put_pixel

Функция устанавливает заданные значения цветов в пиксель.

1.1.2) xLine

Функция рисует горизонтальную линию заданного цвета шириной в 1 и длиной от одного переданного пикселя до другого переданного пикселя.

1.1.3) yLine

Функция рисует вертикальную линию заданного цвета шириной в 1 и длиной от одного переданного пикселя до другого переданного пикселя.

1.1.4) fill_circle

Функция, используя рекурсивный метод заливки цветом, заполняет окружность переданным цветом.

1.1.5) circle_part

Функция рисует одну четвертую окружности заданной ширины и цвета в зависимости от переданной четверти. Эта функция создана из-за того, что при вычислении центра и радиуса окружности иногда (в зависимости от длины стороны квадрата) получаются не целые числа, и для того, чтобы окружность была вписана в квадрат, было принято решение рисовать четверти окружностей из 4 пикселей максимально приближенных к истинному центру. Для реализации данной функции был изучен алгоритм Брезенхема, на его основе и была написана функция. Функция, вычисляя внешний и внутренний радиусы окружностей, заполняет между ними пространство, вызывая функции xLine, yLine.

1.1.6) circle

Функция рисует окружность заданной ширины и цвета и если был подан цвет закраски, то и закрашивает ее. Сначала функция определяет, был подан центр и радиус или координаты углов квадрата. Затем если были поданы координаты квадрата и если разница между иксами нечетная, то вызывается функция circle_part 4 раза, а затем заливается, если надо, а если разница между иксами четная, то функция вычисляет центр и радиус окружности. Когда у окружности известны радиус и центр, то функция рисует окружность, вычисляя внешний и внутренний радиусы, и заполняет пространство между ними нужным цветом. В конце если требуется заливка, то вызывается функция fill_circle.

Соседние файлы в папке 2 сем