Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов»



страница3/5
Дата26.07.2014
Размер0.59 Mb.
ТипПояснительная записка
1   2   3   4   5

2 ОПИСАНИЕ АЛГОРИТМА ОТОБРАЖЕНИЯ ФАЙЛА

2.1 Открытие файла BMP

Открытие BMP файла осуществляется методом LoadFromFile, который загружает BMP-файл с заданным именем, считывая его с диска в оперативную память. В процессе загрузки сначала читается заголовок растрового файла, затем вычисляются размер заголовка информационного блока в совокупности с цветовой таблицей, который указывается в поле infoHeadSize.

Помимо этого в поле imageSize указывается вычисленный размер изображения в байтах. Полученные величины используются для указания размеров динамически выделяемой памяти под заголовок информационного блока plnfoHead и под массив пикселов aBitmapBits. После выделения указанной памяти соответсвующие компоненты растра читаются из файла.

На рисунке 2.1 показан алгоритм реализации чтения BMP файла.


ОткрытьФайл (Файл, ИмяФайла.bmp);

Если(ОшибкаПриОткрытииФайла) то

начало

Сообщение(Ошибка при открытии файла);



Выход;

конец;


Прочитать (Файл, Заголовок);

Если (тип_рисунка≠поддерживаемый_системой) то

начало

Сообщение(Данный формат изображения не поддерживается);



Выход;

конец


Если (Палитра) то

начало


Прочитать(Файл, Палитра);

ПрочитатьДанныеИзображенияСПалитрой;

конец

иначе


ПрочитатьДанныеИзображения;

ЗакрытьФайл(Файл);



2.3 Отображение изображения
Алгоритм отображения изображения представлен на рисунке
Рисунок 2.4 – Алгоритм отображение файла

Рисунок 2.3 – Алгоритм чтения BMP файла


Рисунок 2.1 – Алгоритм чтения BMP файла

2.2 Алгоритм сохранения изображения в GIF-формате

Алгоритм сохранения изображения в GIF-файл представлен на рисунке (см. рис. 2.2).



нач

создать файл имя_файла.gif;

открыть файл имя_файла.gif;

запись Идентификатор GIF;

запись Дескриптор экрана;

запись Глобальная таблица цветов;


запись Дескриптор изображения;
запись Локальная таблица цветов
применения сжатия LZW к данным
запись Растровых данных
запись Терминатор GIF

закрыть файл имя_файла.gif;



кон

Рисунок 2.2 – Алгоритм сохранения изображения в формат GIF


3 Описание алгоритмов реализации эффектов
3.1 Преобразование цветов между базисами RGB и CMY

CMY (Cyan, Magenta, Yellow - голубой, пурпурный, желтый) - аппаратно-ориентированная модель, используемая в полиграфии для субтрактивного формирования оттенков, основанного на вычитании слоем краски части падающего светового потока. Цвета модели CMY являются дополнительными к цветам модели RGB, т.е. дополняющими их до белого. png" name="рисунок 4" align=left hspace=12 width=290 height=162 border=0>


Рисунок 3.1 – Цветовой куб модели CMY
Таким образом, система координат CMY - тот же куб, что и для RGB, но с началом отсчета в точке с RGB координатами (1,1,1), соответствующей белому цвету. Цветовой куб модели CMY показан на рисунке 2.4.

Конвертация RGB в CMY: C := 255 - R; M := 255 - G; Y := 255 - B;

Конвертация CMY в RGB: R := 255 - C; G := 255 - M; B := 255 - Y;

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++){

R = aBitmapBits[row*bytesPerLine + col*3 + 2];

G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];

B = aBitmapBits[row*bytesPerLine + (col*3)];


C = 255-R;

M = 255-G;

Y = 255-B;
aBitmapCMY[row*bytesPerLine + (col*3)] = Y;

aBitmapCMY[row*bytesPerLine + (col*3)+ 1] = M;

aBitmapCMY[row*bytesPerLine + col*3 + 2] = C

Рисунок 3.2 - Конвертация RGB в CMY

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++){

C = aBitmapCMY[row*bytesPerLine + col*3 + 2];

M = aBitmapCMY[row*bytesPerLine + (col*3)+ 1];

Y = aBitmapCMY[row*bytesPerLine + (col*3)];
R = 255-C;

G = 255-M;

B = 255-Y;
aBitmapBits[row*bytesPerLine + (col*3)] = B;

aBitmapBits[row*bytesPerLine + (col*3)+ 1] = G;

aBitmapBits[row*bytesPerLine + col*3 + 2] = R;

Рисунок 3.3 - Конвертация CMY в RGB


3.2 Преобразование цветов между базисами RGB и HSV
HSV (Hue, Saturation, Value - цветовой тон, насыщенность, количество света) - модель, ориентированная на человека и обеспечивающая возможность явного задания требуемого оттенка цвета (рис. 3). Подпространство, определяемое данной моделью - перевернутый шестигранный конус.

По вертикальной оси конуса задается V - светлота, меняющаяся от 0 до 1. Значению V = 0 соответствует вершина конуса, значению V = 1 - основание конуса; цвета при этом наиболее интенсивны.

Цветовой тон H задается углом, отсчитываемым вокруг вертикальной оси. В частности, 0° - красный, 60° - желтый, 120° - зеленый, 180° - голубой, 240° - синий, 300° - пурпурный, т.е. дополнительные цвета расположены друг против друга (отличаются на 180°).

Насыщенность S определяет насколько близок цвет к "чистому" пигменту и меняется от 0 на вертикальной оси V до 1 на боковых гранях шестигранного конуса.


Рисунок 3.4 – Разложение HSV


Точка V = 0, в которой находится вершина конуса, соответствует черному цвету. Значение S при этом может быть любым в диапазоне 0-1. Точка с координатами V = 1, S = 0 - центр основания конуса соответствует белому цвету. Промежуточные значения координаты V при S=0, т.е. на оси конуса, соответствуют серым цветам. Если S = 0, то значение оттенка H считается неопределенным.

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++)

{

R = aBitmapBits[row*bytesPerLine + col*3 + 2];



G = aBitmapBits[row*bytesPerLine + (col*3)+ 1];

B = aBitmapBits[row*bytesPerLine + (col*3)];

rgbmin = min(R,min(G,B));

rgbmax = max(R,max(G,B));


if (rgbmax > 0.0)

st = (rgbmax - rgbmin) / rgbmax;


if (st > 0.0) {

rc = (rgbmax - R) / (rgbmax - rgbmin);

gc = (rgbmax - G) / (rgbmax - rgbmin);

bc = (rgbmax - B) / (rgbmax - rgbmin);

if (R == rgbmax) ht = bc - gc;

else if (G == rgbmax) ht = 2 + rc - bc;

else if (B == rgbmax) ht = 4 + gc - rc;

ht = ht * 60.0;

if (ht < 0.0) ht += 360.0;

}

H = ht / 360.0;



V = rgbmax;

S = st;
aBitmapHSV[row*bytesPerLine + (col*3)] = V;

aBitmapHSV[row*bytesPerLine + (col*3)+ 1] = S;

aBitmapHSV[row*bytesPerLine + col*3 + 2] = H;


Рисунок 3.5 – Конвертация RGB в HSV
image042

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++){

i_H = aBitmapHSV[row*bytesPerLine + col*3 + 2];

S = aBitmapHSV[row*bytesPerLine + (col*3)+ 1];

V = aBitmapHSV[row*bytesPerLine + (col*3)];

if (!S)

R = G = B = V;



else

{


while (i_H >= 360)

i_H -= 360;

H = i_H;

ii = (int)(H /= 60.0);

fr = H - ii;

c1 = (V * (255 - S)) / 255;

c2 = (V * (255 - S * fr)) / 255;

c3 = (V * (255 - S * (1.0 - fr))) / 255;

switch (ii)

{

case 0: R = V; G = c3; B = c1; break;



case 1: R = c2; G = V; B = c1; break;

case 2: R = c1; G = V; B = c3; break;

case 3: R = c1; G = c2; B = V; break;

case 4: R = c3; G = c1; B = V; break;

case 5: R = V; G = c1; B = c2; break;

} // switch

} // if (!sat)

aBitmapBits[row*bytesPerLine + (col*3)] = B;

aBitmapBits[row*bytesPerLine + (col*3)+ 1] = G;

aBitmapBits[row*bytesPerLine + col*3 + 2] = R;


Рисунок 3.6 – Конвертация HSV в RGB
3.3 Зашумление составляющей M
Алгоритм зашумления изображения по составляющей M представлен на рисунке 3.7.

Определение ширины изображения

Определение высоты изображения

Определить коль-во битов в строке

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++){

Прочитать составляющую M

Добавить шум

if(M < 0) M = 0;

if(M > 255) M = 255;

Запись B обратно в массив пикселов;

}

Рисунок 3.7 – Алгоритм зашумления изображения по M
Для того чтобы зашумить составляющую M в изображении необходимо если в файле есть палитра, то к каждому цвету палитры параметра M прибавить заданный шум.

Если в файле нет палитры, то каждый пиксель нужно разложить на CMY , прибавить к M заданный шум, вернуть пиксель в предыдущий формат и сохранить полученное значение.

В случае если полученное значение составляющей M выходит за границы допустимого его корректируют в зависимости от максимально и минимально возможного для значения пикселя данного размера.
3.4 Зашумление составляющей S
Алгоритм зашумления изображения составляющей S представлен на рисунке 3.8.


Определение ширины изображения

Определение высоты изображения

Определить коль-во битов в строке

for(int row = 0;row < y;row++)

for(int col = 0;col < x;col++){

Прочитать составляющую S из массива HLS

Добавить шум

if(S < 0) S = 0;

if(S > 255) S = 255;

Запись B обратно в массив пикселов HLS;

}

Рисунок 3.2 - Алгоритм зашумления составляющей S.


Рисунок 3.8 – Зашумление составляющей S


Данные в программе хранятся в базисе RGB и для зашумления составляющей S базиса HSV необходимо выполнить преобразование цвета каждого пикселя из базиса RGB в базис HSV, которое выполняет процедура RGBtoHSV. Далее требуется выполнить зашумление составляющей S, прибавлением к ней шума, заданного пользователем, и обратное преобразование из одного базиса в другой, выполняемое функцией HSVtoRGB.
3.5 Фильтрация изображения
Для реализации фильтрации изображения использовался фильтр, который задается матрицей 3x3. Матрица изображена на рис. 3.4.

1

2

1

2

4

2

1

2

1

Рисунок 3.9 – Матрица фильтра 6

Начало

Для I от 1 до Высота

Для J от 1 до Ширина

R = GetR(Цвет_Пикселя[J, I])

G = GetG(Цвет_Пикселя[J, I])

B = GetB(Цвет_Пикселя[J, I])

Цвет_Пикселя[J, I] = RGB(R, G, B) * M

Конец


Рисунок 3.10 – Алгоритм фильтрации изображения.


Изображение покрывается этой матрицей, в цикле попиксельно. При этом каждый элемент матрицы умножается с каждой составляющей соответствующего пикселя. При чем, если составляющая выходит за рамки 0...255, то она приравнивается к ближайшей границе этого интервала.

Алгоритм фильтра представлен на рис. 3.5


3.6 Эффект наложения кругов

Эффект наложения кругов выполняется при помощи созданной вручную матрицы нулей и единиц, где нулями обозначен круг. Разложив изображение в базис RGB, каждая компонента умножается на элемент матрицы.


int Matrix[11][11]={1,1,1,1,0,0,0,1,1,1,1,

1,1,1,0,0,1,0,0,1,1,1,

1,1,0,0,1,1,1,0,0,1,1,

1,0,0,1,1,1,1,1,0,0,1,

0,0,1,1,1,1,1,1,1,0,0,

0,1,1,1,1,1,1,1,1,1,0,

0,0,1,1,1,1,1,1,1,0,0,

1,0,0,1,1,1,1,1,0,0,1,

1,1,0,0,1,1,1,0,0,1,1,

1,1,1,0,0,1,0,0,1,1,1,

1,1,1,1,0,0,0,1,1,1,1};

for(int i = 0;i < h; i++)



{

for(int j = 0;j < w; j++)

{

R = aBitmapBits[j*bytesPerLine + i*3 + 2];



G = aBitmapBits[j*bytesPerLine + (i*3)+ 1];

B = aBitmapBits[j*bytesPerLine + (i*3)];


R *=Matrix [I][J];

G *=Matrix [I][J];

B *=Matrix [I][J];
aBitmapBits[j*bytesPerLine + (i*3)] = B;

aBitmapBits[j*bytesPerLine + (i*3)+ 1] = G;

aBitmapBits[j*bytesPerLine + i*3 + 2] = R;
J++;

if (J==11)

{

J=0;


j+=1;

}

}



I++;

J=0;


if (I==11)

{

I=0;



i+=1

}
Рисунок 3.11 – Эффект наложения кругов




1   2   3   4   5

Похожие:

Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconФорматы графических файлов Web (gif, jpeg)
Рассмотрим набор инструментальных средств для ра­боты с форматами графических файлов Web1
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconОтчет по Курсовой работе По курсу: компьютерная графика «Исследование графических форматов»
...
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconРазработка методов классификации и поиска в коллекциях графических документов и создание информационной системы
Целью данной работы является разработка методов классификации и поиска графической информации и создание информационной системы,...
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconТемы рефератов развитие способов графических изображений в эпоху Возрождения
Методика преподавания графических дисциплин профессором В. О. Гордоном (1892-1971)
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconПояснительная записка к курсовому проекту по курсу: «Системы реального времени»
Их производительность и объем памяти вполне достаточны для решения множества бытовых и промышленных задач, а архитектура ядер многих...
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconПояснительная записка к курсовому проекту по дисциплине «Методы численного анализа» на тему «Ортогональное разложение матриц и его применения»
Главный упор делается на использование ортогональных преобразований в задаче нахождения всех собственных числе (в том числе кратных...
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconПояснительная записка к курсовому проекту по дисциплине «Конструирование измерительных приборов»

Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconПояснительная записка к курсовому проекту по курсу «Схемотехника эвм»
Использовано 5 литературных источников. Графическая часть включает в себя 4 документа: схему электрическую функциональную (Э2), схему...
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconИнновационный проект «Разработка компьютерных игр для обучения в сфере информационных технологий» номинация
Разрабатываемые игры предназначены для использования вузами, а также для самостоятельного изучения информационных технологий
Пояснительная записка к курсовому проекту по курсу «Методы и способы компьютерных информационных технологий» на тему «Разработка программных способов для просмотра графических файлов, создание графических эффектов» iconКонспект урока «Рисование графических примитивов в растровых и векторных графических редакторах. Инструменты рисования растровых графических редакторов» Донская Наталья Ивановна
...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org