Автор работы: Пользователь скрыл имя, 03 Июля 2012 в 02:14, лабораторная работа
Цель работы: изучить основные форматы хранения растровых изображений, по-лучить навыки формирования и чтения изображений в формате BMP с использованием стандартных средств языка С++.
Задание
В процессе работы необходимо на языке C++ реализовать компонент чтения и за-писи растровых изображений в формате BMP. Работу программы продемонстрировать на примере чтения изображения из файла и сохранения в другом файле его вертикального зеркального отображения.
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
Санкт-Петербургский государственный университет
информационных технологий, механики и оптики
Кафедра Компьютерной фотоники и видеоинформатики
Дисциплина: Научно-исследовательская работа студентов
Отчет
по научно-исследовательской работе № 1
Исследование растровых форматов хранения
изображений на примере BMP
Выполнил: Рамзаев А.В.
Группа: 2362
Преподаватель: Волынский М.А.
| Дата | Количество баллов | Подпись |
Теория |
|
|
|
Программа |
|
|
|
Отчет |
|
|
|
Санкт-Петербург
2011 г.
Цель работы: изучить основные форматы хранения растровых изображений, получить навыки формирования и чтения изображений в формате BMP с использованием стандартных средств языка С++.
Задание
В процессе работы необходимо на языке C++ реализовать компонент чтения и записи растровых изображений в формате BMP. Работу программы продемонстрировать на примере чтения изображения из файла и сохранения в другом файле его вертикального зеркального отображения.
Вариант 2
Исходные данные
На вход программы подается изображение в формате BMP (рис. 1).
Результат работы программы
На выходе программы получается файл с вертикальным зеркальным отображением входного изображения. Файл, получаемый в результате работы программы, представлен на рис. 2.
Рис. 1. Исходное изображение
Выводы
Благодаря простой структуре файла, формат BMP очень удобен для хранения изображений с которыми планируется работать программно, из минусов хочется отметить патентную закрытость и отсутствие сжатия.
Приложение
Листинг
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
class pixel {
public:
char Blue, Green, Red;
pixel(){
Red=0;
Green=0;
Blue=0;
}
pixel (char _Red, char _Green, char _Blue) {
Red=_Red;
Green=_Green;
Blue=_Blue;
}
};
class MyBMP {
public:
unsigned int bfSize;
unsigned int bfOffBits;
int Width, Height;
unsigned int BitCount;
int XPerMeter, YPerMeter;
std::vector<pixel> rastr;
MyBMP (int wid, int hei){
Width=wid;
Height=hei;
rastr.resize(Width * Height);
XPerMeter=100000;
YPerMeter=100000;
}
MyBMP () {
Width=1;
Height=1;
rastr.resize(Width * Height);
XPerMeter=100000;
YPerMeter=100000;
}
void ReadBMP(char* line) {
bfSize = 40;
std::ifstream file(line, std::ios::binary);
file.seekg(2);
file.read(reinterpret_cast<cha
file.seekg(10);
file.read(reinterpret_cast<cha
file.seekg(18);
file.read(reinterpret_cast<cha
file.seekg(22);
file.read(reinterpret_cast<cha
file.seekg(28);
file.read(reinterpret_cast<cha
file.seekg(38);
file.read(reinterpret_cast<cha
file.seekg(42);
file.read(reinterpret_cast<cha
rastr.resize(MyBMP::Width * MyBMP::Height);
file.seekg(MyBMP::bfOffBits);
for (int i=0; i<MyBMP::Height; i++) {
for (int j=0; j<MyBMP::Width; j++) {
file.read(reinterpret_cast<cha
}
}
}
void SaveBMP (char* line) {
FILE * out=fopen(line, "wb");
fwrite( &"BM", 2, 1, out );
fwrite( &bfSize, 4, 1, out );
unsigned int Temp=0;
fwrite( &Temp, 4, 1, out );
fwrite( &bfOffBits, 4, 1, out );
Temp=40;
fwrite( &Temp, 4, 1, out );
fwrite( &Width, 4, 1, out );
fwrite( &Height, 4, 1, out );
short sTemp=1;
fwrite( &sTemp, 2, 1, out );
fwrite( &BitCount, 2, 1, out );
Temp=0;
fwrite( &Temp, 4, 1, out );
Temp=3*Width*Height;
fwrite( &Temp, 4, 1, out );
fwrite( &XPerMeter, 4, 1, out );
fwrite( &YPerMeter, 4, 1, out );
Temp=0;
fwrite( &Temp, 4, 1, out );
Temp=0;
fwrite( &Temp, 4, 1, out );
char chTemp;
for (int i=0; i<MyBMP::Height; i++) {
for (int j=0; j<MyBMP::Width; j++) {
chTemp=GetPixel(j,i).Blue;
fwrite( &chTemp, 1, 1, out );
chTemp=GetPixel(j,i).Green;
fwrite( &chTemp, 1, 1, out );
chTemp=GetPixel(j,i).Red;
fwrite( &chTemp, 1, 1, out );
}
}
fclose(out);
}
pixel GetPixel (int Wid, int Hei) {
return(rastr[Hei * Width + Wid]);
}
pixel IventPixel (int Wid, int Hei, pixel pi) {
rastr[Hei * Width + Wid]=pi;
return pi;
}
};
int main (){
MyBMP img;
pixel Temp;
img.ReadBMP("lena_original.
for (int i=0; i<img.Width/2; i++){
for (int j=0; j<img.Height; j++) {
Temp=img.GetPixel(i,j);
img.IventPixel(i,j,img.
img.IventPixel(img.Width-i,j,
}
}
img.SaveBMP("lena2.bmp");
}
Информация о работе Исследование растровых форматов хранения изображений на примере BMP