Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы и курсачи 2022-2023 / 2 сем / Baraeva_Elizaveta_cw

.pdf
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
1 Мб
Скачать
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ
КУРСОВАЯ РАБОТА
Тема: Обработка изображений
Студентка гр. 2383
Бараева Е.Н.
Преподаватель
Азаревич А.Д.
Санкт-Петербург
2023
2
ЗАДАНИЕ
НА КУРСОВУЮ РАБОТУ
Студентка Бараева Е.Н.
Группа 2383
Тема работы: Работа с изображениями в языке Си
Исходные данные: Программа должна иметь CLI или GUI. Программа должна реализовывать весь следующий функционал по обработке png-файла Общие сведения
Формат картинки PNG
без сжатия
файл всегда соответствует формату PNG
обратите внимание на выравнивание; мусорные данные, если их
необходимо дописать в файл для выравнивания, должны быть нулями.
все поля стандартных PNG заголовков в выходном файле должны иметь
те же значения что и во входном (разумеется кроме тех, которые должны
быть изменены). Программа должна реализовывать следующий функционал по обработке PNG­файла (1) Рисование окружности. Окружность определяется:
либо координатами левого верхнего и правого нижнего угла квадрата, в
который она вписана, либо координатами ее центра и радиусом
толщиной линии окружности
цветом линии окружности
окружность может быть залитой или нет
3
цветом которым залита сама окружность, если пользователем выбрана
залитая окружность (2) Фильтр rgb-компонент. Этот инструмент должен позволять для всего
изображения либо установить в 0 либо установить в 255 значение заданной
компоненты. Функционал определяется
Какую компоненту требуется изменить
В какой значение ее требуется изменить
(3) Разделяет изображение на N*M частей. Реализация: либо провести линии
заданной толщины, тем самым разделив изображение либо сохранение каждой
части в отдельный файл. -- по желанию студента (можно и оба варианта). Функционал определяется:
Количество частей по “оси” Y
Количество частей по “оси” X
Толщина линии
Цвет линии
Либо путь куда сохранить кусочки
Содержание пояснительной записки: Содержание, Введение, Реализация, Примеры, Заключение, Список использованных источников, Приложение А.
Предполагаемый объем пояснительной записки: Не менее 10 страниц.
Дата выдачи задания: 22.03.2023
Дата сдачи реферата: 17.05.2023
4
Дата защиты реферата: 19.05.2023 Студентка
Бараева Е.Н.
Преподаватель
Азаревич А.Д.
5
АННОТАЦИЯ
В данной курсовой работе были рассмотрены методы обработки изображений формата PNG. Реализованная программа работает изображениями без сжатия, с глубиной цвета 8 бит. Пользователь взаимодействует с программой с помощью CLI, который был написан с помощью библиотеки getopt.h. В программе предусмотрена обработка некорректных входных данных, возможность вывода подробной информации о PNG файле.
6
СОДЕРЖАНИЕ
Введение
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
7
ВВЕДЕНИЕ
Цель работы.
Целью данной работы является создание программы на языке Си, которая обрабатывает изображения формата PNG в зависимости от поданных аргументов.
Задачи.
Для достижения поставленной цели требуется решить следующие задачи: освоить работу с библиотекой getopt.h и libpng; научиться исправлять проблемы, которые могут возникнуть при некорректном вводе пользователем; научиться работать с изображениями формата PNG; научиться правильно считывать и записывать данные из файла и в файл.
8
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
Функция рисует окружность заданной ширины и цвета и если был подан
цвет закраски, то и закрашивает ее. Сначала функция определяет, был подан
центр и радиус или координаты углов квадрата. Затем если были поданы
координаты квадрата и если разница между иксами нечетная, то вызывается
9
функция circle_part 4 раза, а затем заливается, если надо, а если разница между
иксами четная, то функция вычисляет центр и радиус окружности. Когда у
окружности известны радиус и центр, то функция рисует окружность, вычисляя внешний и внутренний радиусы, и заполняет пространство между ними нужным цветом. В конце если требуется заливка, то вызывается функция
fill_circle.
1.2. Наложение фильтра
1.2.1) filter
Функция в зависимости от переданного флаг устанавливает в 0 или в 255 значение переданного цвета. С помощью switch происходит определение, какой цвет нужно изменить, а затем двойным циклом каждому цвету в пикселе устанавливается переданное значение.
1.3. Разделение изображения на части
1.3.1) draw_vertical_line
Функция рисует вертикальную линию шириной в 1 и длиной в длину изображения пиксель заданного цвета.
1.3.2) draw_horizontal_line
Функция рисует горизонтальную линию шириной в 1 и длиной в ширину изображения пиксель заданного цвета.
1.3.3) split
Функция разделяет изображение линиями заданной толщины и заданным цветом на части. Для проведения вертикальных и горизонтальных линии
вычислялись длины кусочков, затем проводились вертикальные и
горизонтальные линии с помощью функций draw_vertical_line и
draw_horizontal_line.
1.4. Взаимодействие с программой
1.4.1) main
10
Функция принимает аргументы с консоли, затем в зависимости от первого переданного флага, функция вызывает case_circle, case_filter, case_split, help, info. Всем, за исключением функции help, дальше передавались аргументы, которые были переданы в функцию main. Если был передан
неверный флаг, то на экране появляется сообщение об ошибке и вызывается
функция help.
1.4.2) case_circle
Функция считывает и обрабатывает, записывая в переменные, оставшиеся данные с консоли. С помощью цикла и switch и дополнительных функций обрабатываются данные. После их обработки данные проверяются на количество и корректность. Если же их недостаточно или были введены не все, то выводится сообщение об ошибке. Затем создается структура image и в нее записываются данные из PNG-файла, вызывается функция рисования окружности, вызывается функция записи данных из структуры в PNG-файл.
1.4.3) case_filter
Функция считывает и обрабатывает, записывая в переменные, оставшиеся данные с консоли. С помощью цикла и switch и дополнительных функций обрабатываются данные. После их обработки данные проверяются на количество и корректность. Если же их недостаточно или были введены не все, то выводится сообщение об ошибке. Затем создается структура image и в нее записываются данные из PNG-файла, вызывается функция filter, вызывается функция записи данных из структуры в PNG-файл.
1.4.4) case_split
Функция считывает и обрабатывает, записывая в переменные, оставшиеся данные с консоли. С помощью цикла и switch и дополнительных функций обрабатываются данные. После их обработки данные проверяются на количество и корректность. Если же их недостаточно или были введены не все, то выводится сообщение об ошибке. Затем создается структура image и в нее записываются данные из PNG-файла, вызывается функция разделения изображения, вызывается функция записи данных из структуры в PNG-файл.
Соседние файлы в папке 2 сем