Растрові та векторні формати зображень
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
КОНТРОЛЬНА РОБОТА
з предмету “Комп’ютерна графіка”
(варіант №15)
Виконав:
студент групи ПЗС-504
Томашов О.В.
Перевірив викладач:
Козік В.Ю.
м. Бердичів
2007 р.
1. Растрові формати зображень
Растрові формати служать для опису растрової графічної інформації. Кожен окремий піксел зображення представляє самого себе, поза залежністю від його розташування й ролі, що він грає в рисунку. Найпоширенішими з них є: tiff, bmp, pcx, gif, jpeg, png. Графічні компоненти всесвітньої мережі Internet у переважній більшості представлені останніми трьома форматами.
Роздільність файлів таких форматів, як GIF, JPEG, BMP залежить від відеосистеми комп'ютера. У старих комп'ютерах Macintosh приходилося 72 піксела на дюйм екрана (екранна роздільність), для Windows єдиного стандарту не склалося, але сьогодні найчастіше вживається значення 96 пікселів на дюйм екрана. Однак тепер ці параметри стали досить умовними, тому що майже усі відеосистеми сучасних комп'ютерів дозволяють змінювати кількість відображуваних на екрані пікселів. Растрові файли, призначені для підготовки видань до друку, мають, подібно більшості векторних форматів, параметр Print Size — друкований розмір [94].
Растрові формати один від одного відрізняються наступними властивостями: колірними моделями, методами ущільнення, максимальним розміром зображення, який вони можуть забезпечити, шарами різних типів, наявністю Alpha-каналу або каналу плашкових (spot)-кольорів, можливістю здійснювати анімацію, наявністю черезрядкового розгорнення тощо. Деякі характеристики популярних растрових форматів наведено у таблиці 6.1.
Формат BMP
Формат BMP (від слова bitmap) широко використовується в ОС Windows для растрової графіки. Наприклад, якщо вам потрібно створити тло вашого робочого столу, то необхідно записати відповідне зображення в цьому форматі.
Загальна структура BMP-файлу така:
Заголовок файлу BMP називається BITMAPFILEHEADER. У ньому міститься загальний опис файлу. Заголовок має такі поля, наведені в таблиці 6.2.
Далі у файлі йде ще один заголовок — BITMAPINFOHEADER, у якому зберігається опис розмірів растра й колірного формату пікселів (табл. 6.3).
Потім у файлі міститься палітра у вигляді декількох записів RGBQUAD. Кожен запис містить чотири поля (табл. 6.4).
Кількість записів RGBQUAD дорівнює кількості використовуваних кольорів.
Палітра відсутня, якщо число бітів на піксел дорівнює 24. Також палітра не потрібна й для деяких колірних форматів 16 і 32 біти на піксел.
Після палітри (якщо вона є) у файлі BMP записується растр у вигляді бітового (а точніше, байтового масиву). У бітовому масиві послідовно записуються байти рядків растра. Кількість байтів у рядку повинна бути кратна чотирьом, через це, якщо кількість пікселів по горизонталі не відповідає такій умові, то праворуч у кожен рядок дописується певна кількість бітів (вирівнювання рядків на межу подвійного слова).
Можна сказати, що файли BMP мають найбільший розмір порівняно з файлами інших растрових форматів. Растр тут зберігається майже в тому вигляді (якщо не враховувати вирівнювання рядків на довжину, кратну 4 байтам), в якому він записується в оперативну пам'ять для відображення та обробки. Зазвичай програми так і записують файли BMP, хоча в цьому форматі передбачене ущільнення, (компресія, compressing, англ.) растра методом RLE. BMP-файли з компресією можуть мати розширення DIB або RLE.
Існує різновид формату BMP для операційної системи OS/2.
Формат Bitmap32
Це порівняно новий формат, створений на базі формату BMP, від котрого відрізняється тим, що дані про одну точку зберігаються не в 24, а в 32 бітах. Додаткові 8 бітів використовуються для Alpha-каналу. Формат доки що не одержав поширення, але після появи Windows XP, де Alpha-канал був узаконений на рівні ядра системи, формат отримав гарні перспективи на майбутнє.
Отже, для розроблювана цей формат зручний, насамперед, через збереження додаткової складової прозорості, яка зберігається усередині файлу з текстурою.
Формат PCX
Формат PCX запропонований компанією Z-Soft у програмі Paintbrush. Може бути використаний на платформі Macintosh, хоча був написаний для PC. Цей формат застосовувався багатьма компаніями, що спеціалізуються в області програмного забезпечення. Він зручний для зберігання зображень типу ділової графіки (креслення, діаграми, схеми тощо). Підтримуються колірні формати 1, 4, 8 та 24 біти на піксел. До недоліків PCX слід віднести непристосованість до запису фотографій, а також наявність численних версій.
У форматі PCX використаний один із варіантів алгоритму ущільнення RLE (від англійського Run Length Encoding — групове кодування).
RLE — один із найстаріших і найпростіших алгоритмів компресії графіки. Основна його ідея така: якщо в рядках растра зустрічаються ланцюжки з однакових пікселів, наприклад,
то можна замінити ланцюжки на пари чисел — (лічильник повторень, значення). Для окремих пікселів, що не входять до ланцюжків, лічильник не потрібен:
Чим більше ланцюжків у растрі та чим вони довші, тим більший ефект ущільнення.
Як програма може прочитати код RLE? Потрібно якось розрізнювати лічильник та значення. Для цього необхідне спеціальне кодування. У версії RLE для PCX ознакою лічильника служать одиниці у двох лівих бітах (llxxxxxx) поточного байта кодованого масиву. Відповідно 6 бітів, що залишилися, означають кількість повторів у ланцюжку (від 1 до 63) наступного за лічильником значущого байта. Таким чином, рядок із 63 повторюваних байтів перетворюється у два байти, тобто, для таких ланцюжків досягається ущільнення майже в 32 рази.
Окремі байти растра, що не утворюють ланцюжків, кодуються двома способами, в залежності від їхнього значення. Якщо два лівих біти не одиниці, то байт кодується одним власним значенням. Окремі байти виду llxxxxxx доводиться кодувати парою байтів (лічильник повторень, значення), причому лічильник тут дорівнює одиниці:
Спосіб кодування, прийнятий у форматі PCX, можна вважати певним компромісом між максимальною довжиною ланцюжка та вірогідністю кодування окремих байтів двома байтами. Так, довжина ланцюжка обмежена 63, але вірогідність наявності у растрі окремих байтів виду 11xxxxxx становить 1/4. Якщо б ознакою лічильника був тільки один лівий біт (lxxxxxxx), то можна було б кодувати вдвічі довші ланцюжки, але окремих значущих байтів виду lxxxxxxx вже може бути вдвічі більше, ніж llxxxxxx.
Таким чином, для растра, який містить неповторювані байти виду llxxxxxx, алгоритм RLE дасть зворотний результат — замість ущільнення буде збільшення (до двох разів). Це часто спостерігається при застосуванні групового кодування до кольорових фотографій, особливо типу 24 біти на піксел. Зазвичай програми, що використовують цей алгоритм ущільнення (наприклад, програма PC Paintbrush), при виникненні такої ситуації записують графічні дані у формат PCX не ущільненими.
Важливим моментом для кодування 256-колірних зображень є правильний вибір палітри. Якщо індекси llxxxxxx надано кольорам, які рідко зустрічаються в даному растрі, то вірогідність заміни одного байта двома меншає.
2. Векторні формати зображень
Ці графічні формати служать для збережених зображень у вигляді сукупності геометричних примітивів — ліній, дуг, прямокутників, еліпсів тощо. Графічні формати цього типу складаються або зі списку примітивів, або містять у собі набір інструкцій, команд для побудови примітивів. Не виключається й комбінація цих способів. У векторному вигляді зберігають інформацію системи автоматизованого проектування, наприклад, AutoCAD, програми, що створюють ілюстративну графіку, такі як CorelDraw. Векторні плоттери обробляють зображення тільки у векторних форматах. Векторні формати можуть містити або впроваджені у файл растрові об'єкти, або посилання на растровий файл (технологія ОРІ).
Векторні зображення зустрічаються в Інтернеті не дуже часто, хоча зараз досить швидко поширюється формат Shockwave Flash фірми Macromedia. Цей формат спеціально розроблявся для використання в Інтернеті, він здатний зберігати гіпертекстові посилання, графіку, анімацію тощо. Для перегляду Flash-графіки потрібний спеціальний програмний модуль, який вільно поширює фірма Macromedia.
При передачі даних з одного векторного формату в іншій, виникають ускладнення, пов'язані з використанням програмами різних описів графічних примітивів, різних алгоритмів при побудові векторних об'єктів і опису растрів. Фірмою Aldus розроблена технологія ОРІ (Open Prepress Interface), яка дозволяє імпортувати замість оригінальних файлів їхні образи, створюючи в програмі лише копію низької роздільності (ескіз) і посилання на оригінал. У процесі друку на принтері ескізи замінюються на оригінальні файли. Застосування ОРІ дає можливість заощаджувати ресурси комп'ютера (насамперед, пам'ять) і підвищувати його продуктивність. ОРІ широко використовується при роботі з імпортованими графічними файлами, зокрема, у програмах FreeHand і QuarkXPress [94].
Формат DXF
Формат DXF (Drawing Exchange Format) розроблено фірмою AutoDesk у 1982 році для обміну кресленнями та іншими графічними документами в середовищі AutoCAD. Незважаючи на вік цього формату та його недоліки, DXF зараз підтримується багатьма програмами як формат обміну даними.
Файл DXF складається з пар
<код групи>
<команда>
Код групи пояснює те, що міститься в наступному рядку. Наприклад, послідовність пар
0 (означає початок нового елементу) LINE
10 (далі буде значення першої координати X) 12.354
20 (перша координата Y) -34
11 (наступна координата X) 23.08
21 (наступна координата Y) 5.7
визначає лінію.
Наведемо декілька кодів групи (табл. 6.21).
Загальна структура файлу DXF така:
Кожна секція описується так:
Головним недоліком формату DXF можна вважати великий об'єм файлів. У середовищі системи AutoCAD для роботи з документами використовується більш компактний формат — DWG, однак він є внутрішнім форматом, його не розуміють інші програми.
Формат MIF-MID
Тут ми дещо відхилимося від тематики "класичної комп'ютерної графіки" й розглянемо приклад векторного формату, який використовується в геоінформаційних системах (ГІС). Ці системи описують просторові об'єкти сукупністю метричних та атрибутивних (семантичних) даних. Формат MIF-MID є найпопулярнішим векторним форматом обміну даними для ГІС. Він розроблений фірмою MapInfo для власної ГІС, однак зараз використовується майже усіма ГІС як формат експорту-імпорту.
Опис просторових об'єктів у цьому форматі складається з двох файлів — *.MIF та *.МID. Файл із розширенням MIF містить загальний опис та координати вузлових точок об'єктів. Об'єкти можуть бути точковими, лінійними або площинними. Графічні примітиви: Arc, Ellipse, Line, Pline, Point, Rect, Region, Roundrect та Text.
Кольори та стилі показу об'єктів позначаються записами Brash, Pen та Symbol.
Заголовок файлу MIF містить таку інформацію:
• версія формату;
• кодова сторінка для символів;
• символ-роздільник для файлу MID;
• опис системи координат;
• кількість та формат стовпців таблиці атрибутів.
У файл MID (не плутати з файлами формату MIDI) записується таблиця атрибутивних даних. Один рядок файлу містить атрибути відповідного об'єкта, розділені спеціальним символом-роздільником (найчастіше комою).
Файли MIF та MID є текстовими файлами ASCII.
Розглянемо приклад опису об`єктів. На рис. 6.17 показано сім простеньких об'єктів.
Тут маємо два точкових об'єкти ("пункті" та "пункт2"), позначених умовними знаками — прапорець та зірка. Три лінійних об'єкти — лінія, полілінія (3 вузли) та мультиполілінія (декілька поліліній). Два площинних об'єкти — чотирикутник та регіон. Регіон тут у вигляді двох островів, один з яких із отвором. Для об'єктів записані атрибутивні дані у відповідних рядках таблиці.
Тепер надамо опис цих об'єктів у файлах MIF, MID. Зміст файлу MIF:
3. Засобами бібліотеки Opengl забезпечити зміну кольору створеного трикутника при подвійному натисненні лівої кнопки миші
(мал. №1 )
(мал. №2 )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OpenGL;
type
TfrmGL = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: Char);
private
hrc: HGLRC;
h : GLfloat;
end;
var
frmGL: TfrmGL;
Vert:array[1..6,1..10] of GLfloat;
mx,my:byte; //коефіцієнти збільшення/зменшення
implementation
{$R *.DFM}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
wglMakeCurrent(Canvas.Handle, hrc);
glViewPort (0, 0, ClientWidth, ClientHeight);
glClearColor (0.5, 0.5, 0.75, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (2.0, 0.0, 0.8); // текущий цвет примитивов
glBegin (GL_TRIANGLES);
glVertex3f (-1, -1, h);
glVertex3f (-1, 1, h);
glVertex3f (1, 0, h);
glEnd;
SwapBuffers(Canvas.Handle); // содержимое буфера - на экран
wglMakeCurrent(0, 0);
end;
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
procedure TfrmGL.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
h := 0.0;
end;
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close;
If Key = VK_SPACE then
begin
If ssShift in Shift
then h := h + 1
else h := h - 1;
Caption := Floattostr (h);
Refresh
end;
end;
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
FormPaint(Sender);
end;
end.
4. Для попереднього практичного завдання вашого варіанту забезпечити операцію маштабування використовуючи клавіши + та -.
Потім для точного виконання завдання виконати слідуючий алгоритм дій при цьому використати згідно варіанту клавіші «+» та «-», що по умові завдання виконують наближення та відділення фігури на фоні:
procedure TfrmGL.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = '-' then mx:=mx+1;
if key = '+' then mx:=mx-1;
InvalidateRect(Handle, nil, False);
end;
end.
Список використаної літератури:
С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002
Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004.
OpenGl, технология ставшая символов, Учебник в примерах.
Конспект лекцій.
Мережа Інтернет.