Скачиваний:
44
Добавлен:
10.02.2019
Размер:
124.74 Кб
Скачать

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

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

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

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

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

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

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

Тема: Работа с 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

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