МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра МОЭВМ
Курсовая РАБОТА
по дисциплине «Программирование»
Тема: Работа с BMP-файлами
Студент гр. 3303 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2018
ЗАДАНИЕ
на курсовую работу
Студент |
||
Группа 3303 |
||
Тема работы: Работа с BMP-файлами |
||
Исходные данные: Требуется написать программу, которая находит самый большой белый прямоугольник в BMP файле и выводит координаты левого верхнего и правого нижнего его углов. Программа получает input_file - имя BMP файла из входного потока и в случае ошибки не создаётся выходного в файл выводится сообщение об ошибке “Fail with file”.
|
||
Содержание пояснительной записки: Аннотация, содержание, введение, описание функций, вывод результата, список используемых источников, примеры работы, исходный код. |
||
Предполагаемый объем пояснительной записки: Не менее 15 страниц. |
||
Дата выдачи задания: |
||
Дата сдачи реферата: |
||
Дата защиты реферата: |
||
Студент |
|
|
Преподаватель |
|
|
Аннотация
В данной курсовой работе будут представлена работа с BMP-файлами. Будут созданы структуры для работы с BMP-файлами и реализована программа для работы с ними. Будут созданы функции, для поиска вершин фигуры, для проверок по вершинам является ли фигура прямоугольником, и для проверки монотонности прямоугольника. В ходе курсовой работы будет подробно описана реализация данных функций, представлены результаты работы программы.
Содержание
Введение 6
Цель работы: 6
Научиться работать файлами в формате BMP, реализовать функционал поиска максимального белого прямоугольника и вывода заданных условием вершин. 6
Задачи работы: 6
Для достижения поставленной цели требуется решить следующие задачи: 6
Создать структуры BitMapFileHeader, BitMapInfoHeader , RGB для считывания и работы с BMP-файлом и структуры Point, Vector и BmpBasket для эффективного хранения и передачи информации между функциями ; 6
Создать функции search_tops для поиска вершин фигуры и функцию rectangle, которая проверяет является ли фигура монотонным прямоугольником. 6
Осуществить проверку на наличие BMP-файла; 6
Произвести считывание файла и запустить проверки; 6
Вывести результат. 6
1.Краткое описание кода 7
1.1 Структура BitMapFileHeader 7
Здесь и далее для корректного размера структур используется директива #pragma pack(push, 1) #pragma pack(pop) . Это необходимо, чтобы поля структуры не выравнивались до кратного четырем числа байт, а оставались заданного размера. Эта структура предназначена для хранения общей информации о файле. Данная структура содержит следующие поля: 7
uint16_t bfType - тип файла; 7
uint32_t bfSize - размер файла в байтах; 7
uint16_t bfReserved1 - резервное поле; 7
uint16_t bfReserved2 - резервное поле; 7
uint32_t bfOffsetBits – сдвиг битового массива относительно начала файла; 7
1.2. Структура BitMapInfoHeader. 7
Эта структура содержит информацию о параметрах файла, его высоте, ширине и так далее. Она состоит из следующих полей: 7
1)uint32_t biSize - размер данной структуры; 7
2)uint32_t biWidth - ширина изображения в пикселях; 7
3)uint32_t biHeight - высота изображения в пикселях; 7
4)uint16_t biPlanes - количество плоскостей; 7
5)uint16_t biBitCount - количество бит на пиксель; 7
6)uint32_t biCompression - тип сжатия; 7
7)uint32_t biSizeImage - размер изображения в байтах; 7
8)uint32_t biXpenlsPerMeter- горизонтальное разрешение в пикселях на метр; 8
9)uint32_t biYpenlsPerMeter - вертикальное разрешение в пикселях на метр; 8
10)uint32_t biColorUsed - количество используемых цветов из таблицы. Если это значение равно нулю, то в растре используется максимально возможное количество цветов, которые разрешены значением biBitCount; 8
11)uint32_t biColorsImportant;- это количество важных цветов. Определяет число цветов, которые необходимы для того, чтобы изобразить рисунок. Если это значение равно 0 (как это обычно и бывает), то все цвета считаются важными. 8
1.3. Структура RGB. 8
Необходима для считывания одного пикселя изображения. Содержит информацию о красной, желтой и синей составляющей цвета пикселя. 8
1.4. Структура Point. 8
Служит для описания точки на плоскости. 8
1.5. Структура Vector. 9
Служит для описания вектора на плоскости. 9
1.6. Структура BmpBasket. 9
Служит обёрткой для данных: координат вершин и размеров плоскости. 9
1.7. Функция rectangle. 9
Принимает на вход структуру с данными BmpBasket и массив с данными arr[][]. На основе вершин строятся векторы структуры Vector, сравниваются их длины с погрешностью ERROR (значение по умолчанию 0.06 ) и угол между векторами. После проводиться проверка на монотонность фигуры и в случае успеха возвращается площадь фигуры. В случае неудачи -1. 9
1.8. Функция search_tops. 10
Принимает на вход указатель на структуру с данными BmpBasket и массив с данными arr[][]. Рекурсивно проходит по фигуре алгоритмом заливки, ища наибольшие и наименьшие вершины и модифицируя данный BmpBasket. Ничего не возвращает. 10
1.9. Функция main. 11
В этой функции были созданы следующие переменные: 11
BitMapFileHeader file_header и BitMapInfoHeader info_header - необходимые для считывания информации о файле; 11
RGB rgb - для считывания пикселей; 11
BmpBasket basket – для хранение информации; 11
Point p1_max и p2_max – для хранения итоговых точек; 11
uint8_t pixel_grid[basket.height][basket.width] - для хранения массива в подготовленном виде. 11
В этой функции осуществляется считывание входных данных, проверка на наличие файла и вызов функций для поиска вершин фигуры и проверки, является ли она прямоугольником. 11
Находим число пустых байтов необходимых для дописывания. 11
Считываем картинку создавая двухцветный массив pixel_grid( 1 -белый цвет, 0 -остальные). 12
Инициализируем переменные для площади фигуры и максимальной площади фигуры. В циклах движемся по массиву, пытаясь найти часть фигуры, и перекрашивая пройденные ячейки. В случае успеха запускаем search_tops для поиска вершин и rectangle для проверки на прямоугольник. И сравниваем площадь с максимальной и перезаписываем итоговые точки, если нужно. 12
Если нашли прямоугольник, то выводим точки и закрываем файл. 13
2.1. Тест на несуществующий файл (рисунок 1). 14
Вводим название несуществующего файла. 14
Выводы. 16
В ходе данной курсовой работы были решены поставленные задачи, созданы тесты для проверки корректной работы программы, представлены результаты их выполнения. Была на практике освоена работа с файлами, и более детально разобраны методы работы с BMP-файлами, их считывания и обработки. Была написана программа для поиска наибольшего белого прямоугольника и вывода его координат. 16
Список использованных источников 17
1.Курс «программирование (ЛЭТИ) 2 семестр» на сайте stepik.org 17
2.URL: https://stepik.org/course/3458. 17
3.Структура BMP-файла 17
4.URL: https://ru.wikipedia.org/wiki/BMP 17
5.Керниган Ритчи «C programming language» 17
Приложение А. 18