Grafika w Turbo Pascal z przykładami


Grafika w Turbo Pascal'u

Turbo Pascal - Moduł standardowy GRAPH

Moduł Graph zawiera ponad 70 procedur i funkcji standardowych, obsługuje grafikę ekranową. Procededury i funkcje tego modułu pozwalają rysować na ekranie krzywe różnych kształtów i kolorów, wypełniać kontury określonym kolorem, a także wprowadzać na ekran napisy (poziomo i pionowo) w różnych krojach pisma, z możliwością ich zmniejszania i powiększania.
Wykorzystanie standardowych procedur i funkcji modułu Graph wymaga jego deklaracji za pomocą słowa kluczowego uses. Przed wywołaniem pierwszej funkcji lub procedury graficznej moduł Graph powinien zostać zainicjowany przez wywołanie procedury InitGraph, która ładuje do pamięci i inicjuje odpowiedni sterownik.

Poniższa procedura wykrywa naszą kartę oraz tryb graficzny, który obsługuje.

DetectGraph(Karta,Tryb); { u mnie karta 9 - VSA, tryb 2 - VGAHi }

Po detekcji jest inicjalizacja. Poniższa procedura stawia już tylko przysłowiową kropkę nad i. Trzecim parametrem jest katalog, w którym znajdują się sterowniki graficzne i czcionki.

InitGraph(Karta,Tryb,'c:\bp\bgi');

Spójrzmy na prostą detekcję naszej karty graficznej i jej parametrów.

program detekcja;

uses graph;

var i,x,y : integer;

Karta, Tryb : Integer;

begin

DetectGraph(Karta,Tryb);

InitGraph(Karta,Tryb,'c:\bp\bgi');

{ jestesmy teraz 'wewnatrz' trybu graficznego }

x:= getmaxx;

y:= getmaxy;

CloseGraph;

writeln('Sterownik graficzny numer: ',Karta);

writeln('Tryb : ',Tryb);

writeln('Rozdzielczosc: ',x,' X ',y);

Readln;

end.

Program rysuje koło z wykorzystaniem funkcji sinus i cosinus.

W kolejnym programie zaprezentuję procedurę PutPixel(z modułu Graph), jej parametrami są: pozycja X, pozycja Y, kolor zapisany jako łańcuch lub jako wartość liczbowa

Oczywiście w module Graph są gotowe funkcje rysujące koła etc.(o czym później), ale chciałem pokazać na jakiej zasadzie są one tworzone - wszystkie bowiem figury są opisywane przez równania matematyczne.

program kolo_sin_cos_biegunowo;

uses

graph,crt;

var i,x,y : integer;

Karta, Tryb : Integer;

begin

DetectGraph(Karta,Tryb);

InitGraph(Karta,Tryb,'c:\bp\bgi');

for i:=1 to 360 do

PutPixel(GetMaxX div 2+Round(SIN(i)*50), GetMaxY div 2+Round(COS(i)*50),Yellow);

Readln;

CloseGraph;

end.

W module graph zaczynamy się już bawić w rozdzielczościach 640 na 480 (najczęścięj).

Pierwszego programu rysujący pixel

program pixel;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\pascal\bgi\');

end;

procedure piksel;

begin

putpixel(100,100,1);

end;

begin

inicjacja;

piksel;

readkey;

closegraph;

end.

Objaśnienie:

Tu widzimy parę nowych komend, czas na ich wytłumaczenie.

detectgraph(...,...); - wykrywa nasz sterownik i tryb w którym ma pracować. Na miejsu kropek trzeba podać zmienną

initgraph(...,...,'ścieżka dostępu do katalogu bgi'); - inicjacja trybu graficznego. Na miejscu kropek trzeba podać te same zmienne co w detectgraph.

putpixel(x,y,c); - wstawia piksel w miejscu x,y i o kolorze c.

readkey; - oczekuje na wciśnięcie klawisza; closegraph; - zamyka modul graph.

Uwagi:

W trybie 640 na 480 piksel w górnym lewym rogu będzie miał współrzędne 0,0, a piksel w dolnym prawym rogu 639,479.

Zalecam robienie procedure, wtedy program jest bardziej przejrzysty i łatwiejszy w zrozumieniu.

Powiedzmy, że pascal znajduje się w katalogu kompilatory, to ścieżka będzie wyglądała tak:

'c:\kompilatory\pascal\bgi\'

Program 2 będzie rysował dwie linie.

program linie;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure linie;

begin

lineto(100,100);

line(200,200,300,200);

end;

begin

inicjacja;

linie;

readkey;

closegraph;

end.

Objaśnienie:

line(x,y,x2,y2); - rysuje linię od miejsca x,y do miejsca x2,y2.

lineto(x,y); - rysuje linię od miejsca aktualnego położenia wskaŸnika ekranu do miejsca x,y.

Następny program zmieni tło na kolor niebieski, wstawi tekst i namaluje zieloną linię.

program tlo;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure napis;

begin

outtextxy(200,100,'To moj juz 17 program.');

end;

procedure linia;

begin

line(200,120,370,120);

end;

begin

inicjacja;

setbkcolor(1);

setcolor(2);

napis;

linia;

readkey;

closegraph;

end.

Objaśnienie:

outtextxy(x,y,'tekst'); - wstawia tekst w miejscu x,y.

setcolor(c); - ustawia kolor dla linii i tekstu.

setbkcolor(c); - ustawia kolor dla tła.

Malowaniu prostokątów.

Oto pierwszy program

program prog18;

uses crt,graph;

var sterownik,tryb:integr;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure pros;

begin

bar(100,100,300,200);

end;

begin

inicjacja;

pros;

readkey;

closegraph;

end.

Objaśnienie:

bar(x,y,x2,y2); - maluje prostokśt o lewym górnym rogu w miejscu x,y i o prawym dolnym rogu w miejscu x2,y2.

Następny program będzie malował wypełniony prostokąt.

program prog19;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure pros;

begin

setfillstyle(1,8);

bar(100,100,300,200);

end;

begin

inicjacja;

setbkcolor(1);

pros;

readkey;

closegraph;

end.

Objaśnienie:

W tym programie wystąpiła tylko jedna nowa procedura:

setfillstyle(s,c); - określa styla i kolor wypełnienia. Pierwsza cyfra określa styl wypełnienia, jest chyba 10 stylów do wyboru. Druga cyfra określa kolor wypełnienia, jeœli nie pamiętasz kolorów zajrzyj do pierwszej lekcji modułu crt (na końcu).

Następny program także o prostokącie

program prog20;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure pros;

begin

setbkcolor(1);

rectangle(100,100,200,200);

setfillstyle(2,2);

bar3d(100,250,200,350,30,true);

end;

begin

inicjacja;

pros;

readkey;

closegraph;

end.

Objaśnienie:

rectangle(x,y,x2,y2); - maluje nie wypełniony prostokąt o górnym lewym punkcie x,y i o dolnym prawym punkcie x2,y2.

bar3d(x,y,x2,y2,g,p); - maluje prostokąt o górnym lewym punkcie x,y i o dolnym prawym punkcie x2,y2, wypełnia go ustawionym stylem i tworzy z niego prostopadłoœcian o głębokoœci 'g'. Za literę p trzeba podać wyraz true lub false. True oznacza, że prostopadłościan ma być z górną podstawą, a false, odwrotnie do true.

Elipsy i okręgi

Najpierw program rysujący elipsę o środku 200,200

program prog21;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure elipsa;

begin

setbkcolor(0);

setcolor(14);

ellipse(200,200,0,360,100,50);

end;

begin

inicjacja;

elipsa;

readkey;

closegraph;

end.

Objaœnienie:

ellipse(x,y,a,b,r1,r2); - maluje elipsę (łuk) o œrodku x,y, o osi poziomej r1 i osi pionowej r2. Jeżeli w miejscu a wpiszemy 0, a w miejscu b 360 otrzymamy elipsę, w innym przypadku będzie to tylko łuk elipsy.

Popróbujcie z innymi kštami elipsy, bo napewno się wam przydadzš.

Następny program namaluje nam elipsę wypełnioną ustawionym stylem.

program prog22;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure wypelipsa;

begin

setbkcolor(0);

setfillstyle(1,14);

fillellipse(200,200,100,50);

end;

begin

inicjacja;

wypelipsa;

readkey;

closegraph;

end.

Objaśnienie:

fillelipse(x,y,r1,r2); - maluje wypełnioną elipsę o środku x,y o długości osi poziomej r1 i o długości osi pionowej r2.

Wypełniona elipsa jest dużo łatwiejsza niż sam łuk elipsy.

Następny program rysuje okrąg.

program prog23;

uses crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'c:\...\bgi\');

end;

procedure okrag;

begin

setbkcolor(0);

setcolor(4);

circle(200,200,100);

end;

begin

inicjacja;

okrag;

readkey;

closegraph;

end.

Objaśnienie:

circle(x,y,r); - rysuje okršg (bez wypełnienia) o środku x,y i promieniu r.

Obsług myszki w graphie.

Na początku musimy stworzyć moduł obsługujący myszkę, więc do roboty.

unit modul1;

interface

uses dos;

procedure pokazm;

procedure ukryjm;

procedure pozycjam;

procedure klatkam(x1,y1,x2,y2);

implementation

procedure pokazm;

var r:registers;

begin

r.ax:=$0001;

intr($33,r);

end;

procedure ukryjm;

var r:registers;

begin

r.ax:=$0002;

intr($33,r);

end;

procedure pozycjam(x,y,b);

var r:registers;

begin

r.ax:=$0003;

intr($33,r);

x:=r.cx;

y:=r.dx;

b:=r.bx;

end;

procedure klatkam(x1,y1,x2,y2);

var r:registers;

begin

r.ax:=$0007;

r.cx:=x1;

r.dx:=x2;

intr($33,r);

r.ax:=$0008;

r.cx:=y1;

r.dx:=y2;

intr($33,r);

end;

end.

To naszczęœcie był moduł, to znaczy, że z nim często nie będziemy się widzieli :) Moduł ten musicie umieœcić w katalogu z pascalem. Jeżeli macie pascala na dysku c we folderze pascal, to trzeba go włożyć do 'C:\pascal\'. Modułu nie da się skompilować do końcówki .exe. Moduł w c ma takš nazwę modul.tpu. Moduł jest nawet podobny do samego programu, ale moduł posiada tylko procedury. Jak już zauważyliœcie na poczštku modułu pisze się 'unit', a nie jak w przypadku programu 'program'. Tyle o module, przejdŸmy do programu używajšcy powyższy moduł.

program prog24;

uses modul1,crt,graph;

var sterownik,tryb:integer;

procedure inicjacja;

begin

detectgraph(sterownik,tryb);

initgraph(sterownik,tryb,'C:\...\pascal\bgi\');

end;

begin

inicjacja;

pokazm;

readkey;

end.

W tym programie nic nowego się nie pojawiło obrócz użycia modułu o myszce. Ta lekcja była bardzo krótka, ale to z tego względu, że jestem œpišcy :). Po za tym nad 25 programem będę musiał chwilę pomyœleć, w końcu to będzie milenijny. Nie zapominajcie, że możecie przysyłać swoje prace. Zwłaszcza jak zrobicie jakiœ rysunek, dom albo samochód. Aby ułatwić wam rysowanie podam wam jeszcze raz komendy dotyczšce rysowania.

floodfill(x,y,c); - wypełnia dowolny zamknięty obszar. x,y - współrzędne, c - kolor

setcolor(c) - ustawia kolor dla linii i tekstu

setbkcolor(c) - ustawia kolor dla tła

ellipse(x,y,a,b,r1,r2); - maluje elipsę (łuk) o œrodku x,y, o osi poziomej r1 i osi pionowej r2. Jeżeli w miejscu a wpiszemy 0, a w miejscu b 360 otrzymamy elipsę, w innym przypadku będzie to tylko łuk elipsy.

fillelipse(x,y,r1,r2); - maluje wypełnionš elipsę o œrodku x,y o długoœci osi poziomej r1 i o długoœci osi pionowej r2.

circle(x,y,r); - rysuje okršg (bez wypełnienia) o œrodku x,y i promieniu r.

putpixel(x,y,c); - wstawia pixel w miejscu x,y o kolorze c

line(x,y,x2,y2); - maluje linię od punktu x,y do punktu x2,y2

lineto(x,y); - maluje linię od obecnego miejsca położenia do punktu x,y

http://free.of.pl/p/programek/



Wyszukiwarka

Podobne podstrony:
Grafika w Turbo Pascalu, Informatyka -all, INFORMATYKA-all
Grafika w Turbo Pascal'u 2, 1
Grafika w Turbo Pascal'u 1, Grafika w Turbo Pascal'u
Notatka grafiki w pascalu, Turbo pascal
Turbo Pascal i Borland C Przyklady
Turbo Pascal i Borland C Przyklady Wydanie II tcper2
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami
Turbo Pascal i Borland C Przyklady Wydanie II tcper2
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami tpzada
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami tpzada
Turbo Pascal i Borland C Przyklady Wydanie II 2
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami 2
Turbo Pascal i Borland C Przyklady Wydanie II
Turbo Pascal i Borland C Przyklady tcpere
Turbo Pascal i Borland C Przyklady

więcej podobnych podstron