Смекни!
smekni.com

Растрові та векторні формати зображень (стр. 2 из 2)


Формат 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.


Список використаної літератури:

1. С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002

2. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004.

3. OpenGl, технология ставшая символов, Учебник в примерах.

4. Конспект лекцій.

5. Мережа Інтернет.