Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.docx
Скачиваний:
36
Добавлен:
01.09.2021
Размер:
1.57 Mб
Скачать

Часть 2. Реализация простых методов обработки изображений и палитровые изображения.

  1. Реализовать перегрузку оператора Image operator /= (Image InpImage), осуществляющего масштабирование изображений.

  2. Добавить в методы возможность считывания, создания и записи палитровых изображений. Дополняются все методы кроме конструктора без параметров Image (). Глубина цвета выбирается в зависимости от варианта задания.

  3. Реализовать перегрузку оператора Image operator / (short Depth), осуществляющего изменение глубины цвета.

Для варианта 5:

  • Одномерный массив

  • RGBTRIPLE

  • 4 и 8 бит

Описание структуры bmp файла Части bmp-файла

BMP-файлы состоят из следующих частей:

- Заголовок файла (структура BITMAPFILEHEADER). Содержит информацию о типе, размере и макете файла, который содержит изображение.

- Заголовок изображения (структура BITMAPINFOHEADER). Содержит информацию об изображении аппаратно-независимого растрового формата.

- Данные изображения (Массив структур RGBTRIPLE или RGBQUAD). В файле данные пикселей изображения хранятся построчно, начиная с нижней строки.

Сначала мы создаем структуру заголовка BMP – файла: struct BITMAPFILEHEADER

{

unsigned short Type;

unsigned long Size; // Размер файла в байтах, BitCount*Height*Width+ OffsetBits

unsigned short Reserved1; // Зарезервирован; должен быть нуль

unsigned short Reserved2; // Зарезервирован; должен быть нуль

unsigned long OffsetBits; // Смещение данных от начала файла в байтах

};

После этого мы создаем структуру информации BMP – файла:

struct BITMAPINFOHEADER

{

unsigned long Size; // Число байтов необходимое для структуры = 40

unsigned long Width; // Ширина точечного рисунка в пикселях

unsigned long Height; // Высота точечного рисунка в пикселях

unsigned short Planes; // Число плоскостей целевого устройства = 1

unsigned short BitCount; // Глубина цвета, число бит на точку = 0,1,4,8,16,24,32

unsigned long Compression; // Тип сжатия = 0 для несжатого изображения

unsigned long SizeImage; // Размер изображения в байтах BitCount*Height*Width

unsigned long XPelsPerMeter; // Разрешающая способность по горизонтали

unsigned long YPelsPerMeter; // Разрешающая способность по вертикали

unsigned long ColorUsed; // Число индексов используемых цветов. Если все цвета = 0

unsigned long ColorImportant; // Число необходимых цветов = 0

};

А затем, создаем палитры RGBTRIPLE и RGBQUAD

struct RGBTRIPLE

{

unsigned char Blue;

unsigned char Green;

unsigned char Red;};

struct RGBQUAD

{

unsigned char Blue;

unsigned char Green;

unsigned char Red;

unsigned char Reserved;

};

Масштабирование

Для масштабирования изображений необходимо добавить оператор в список методов класса:

Image operator /= (Image InpImage);

Метод использует следующий подход: цвет пикселя в масштабированном изображении принимается равным цвету ближайшего к нему пикселя исходного изображения.

Масштабирования изображения происходит следующим образом:

- Для начала вычисляются отношения высоты и ширины текущего изображения к исходному.

- Затем вычисляются каждые координаты x и y исходного изображения.

- После чего записывается значение цвета исходного изображения в текущее.

Соседние файлы в предмете Технология программирования