Описание структуры файла BMP Содержание Задание. 3 Описание структуры файла BMP. 5 Описание структуры класса Image. 5 Описание всех используемых структур, переменных и методов класса Image. 6 Алгоритм масштабирования изображений. 8 Результаты масштабирования и изменения глубины цвета. 10 Листинг кода программы.. 12 Задание. Часть1. Вариант № 6: Двумерный массив и RGBTRIPLE. 1. Создать класс Image, содержащий информацию об изображении. Все используемые изображения должны быть беспалитровые несжатые. Глубина цвета 24 или 32 бит. Структура, в которой хранятся данные изображения может быть RGBQUAD или RGBTRIPLE взависимости от варианта. 2. Для хранения используется либо одномерный, либо двумерный массив в зависимости от варианта. 3. Реализовать считывание данных изображения из файла в виде конструктора и метода класса: Image (char *fileName) и int loadimage(char *fileName). Функции должны выполнять следующие операции: - Считывание и хранение заголовка файла внутри функции - Считывание и сохранение заголовка изображения в данных объекта. Версии заголовка BITMAPV4HEADER и BITMAPV5HEADER не рассматриваются. - Выделение памяти под массив данных изображения, на который указывает Rgbtriple, - Последовательное считывание данных изображения (RGBTRIPLE) или (RGBQUAD), в зависимости от BITMAPINFOHEADER.BitCount. Данные RGBTRIP (RGBQUAD) приводятся после считывания к структуре, указанной в варианте. - В случае ошибки loadimage(char *filename) возвращает 0. 4. Реализовать создание объекта нового изображения конструктором: Image (char Mode, unsigned short BCount, int Width, int Height). Функция выполняет следующее: - Заполняет структуру BITMAPINFOHEADER в зависимости от входных параметров Width, Height. Поля вычисляются или задаются стандартным образом. Создаваемое изображение беспалитровое несжатое. Глубина цвета 24 или 32 бит. - Выделяет память под массив данных изображения, на который указываетRgbtriple(или Rgbquad). - Записывает данных изображения в зависимости от параметра Mode. 5. Реализовать метод записи изображения в файл void writeimage(char *filename). Функция должна выполнять следующие операции: - Открытие файла filename для записи. - Вычисление полей и заполнение структуры BITMAPFILEHEADER. Запись структуры в файл. - Запись структуры BITMAPINFOHEADER в файл. - Запись данных изображения в файл построчно, начиная с нижней строки. В зависимости от BITMAPINFOHEADER.BitCount данные преобразуются к нужному типу. - Закрытие файла 6. Реализовать конструктор без параметров Image (), который не выделяет память под массив данных, все параметры изображения = NULL. Никакие операции кроме присваивания или загрузки изображения из файла с этим объектом выполняться не могут. 7. Реализовать конструктор копий Image (const Image &i) и перегрузку оператора “=”. Image operator = (Image Inp), выделяющих память отдельно под копию, это необходимо так как при обычном копировании Rgbtriple(или Rgbquad) копии будет ссылаться на ту же область памяти, что и Rgbtriple(или Rgbquad) оригинала. Помимо этого, при перегрузке оператора “=” надо учесть, что присваивание происходит лишь, если левый элемент пуст (это можно определить по BITMAPINFOHEADER.Size=0), в этом случае содержимое объекта копируется полностью. Или изображения имеют один и тот же формат, в этом случае копируются только данные изображения. После того как изображение создано, изменять его параметры (BITMAPINFOHEADER) нельзя. 8. Реализовать деструктор ~Image (). Часть 2. Вариант № 6: 4 и 8 бит. 1. Реализовать перегрузку оператора Image operator /= (Image InpImage), осуществляющего масштабирование изображений. 2. Добавить в методы возможность считывания, создания и записи палитровых изображений. Дополняются все методы кроме контсруктора без параметров Image (). Глубина цвета выбирается в зависимости от варианта задания. 3. Реализовать перегрузку оператора Image operator / (short Depth), осуществляющего изменение глубины цвета. Описание структуры файла BMP BMP-файлы состоят из следующих частей: - Заголовок файла. Содержит информацию о типе, размере и макете файла, который содержит изображение (структура BITMAPFILEHEADER).. - Заголовок изображения. Содержит информацию об изображении аппаратно-независимого растрового формата (структура BITMAPINFOHEADER). - Палитра (массив структур RGBQUAD). Палитра присутствует только в BMP-файлах, содержащих палитровые изображения (с глубиной пикселей 8 бит и менее) - графические данные (массив структур RGBTRIPL). Графические данные — это и есть само изображение. |