wykład III programowanie Lazarus

background image

Lazarus – GRAFIKA

background image

GDI

(ang. Graphics Device Interface)

GDI odpowiedzialne jest za przedstawianie

obiektów graficznych i przesyłanie ich do
urządzeń

wyjściowych,

takich

jak monitory i drukarki.

Funkcje zawarte w GDI umożliwiają

wszystkiego

podstawowe

sposoby

„rysowania” (elementy geometryczne,
tekstowe, rastrowe) na powierzchni okien
i innych obiektów w systemie Windows.

2

http://pl.wikipedia.org/wiki/Graphical_Device_Interfa
ce

background image

TCanvas

(ang.Canvas-płótno)

Większość obiektów graficznych

posiada własność Canvas typu
TCanvas;

Udostępnienie takiej właściwości przez

komponent umożliwia bezpośrednie
„rysowanie” po jego powierzchni.

3

background image

TCanvas

Wspólne właściwości obiektu TCanvas

to:

- Font

- Brush

- Pen
- PenPos
- Pixels

4

background image

TCanvas

• Arc
• Chord
CopyRect
Draw
• Ellipse
• FillRect
• FloodFill (VCL only)
• FrameRect (VCL only)

LineTo
MoveTo

5

Pie
Polygon
Polyline

Rectangle

RoundRect
StretchDraw
TextHeight, TextWidth
TextOut
TextRect

Wspólne metody udostępnione przez obiekt TCanvas
to:

background image

TCanvas

LineTo

procedure LineTo(X: Integer; Y:

Integer);

Rysuje linię od punktu określonego

przez PenPos do punktu określonego
przez współrzędne X,Y

np. Form1.Canvas.LineTo(100,100);

Gdzie jest punkt (100,100)?
Gdzie jest punkt (0,0)?
Dlaczego takie położenie linii?

6

background image

TCanvas

Form1.Canvas.MoveTo(100,100);
Form1.Canvas.LineTo(100,200);
Form1.Canvas.LineTo(200,200);
Form1.Canvas.LineTo(200,100);
Form1.Canvas.LineTo(100,100);

7

form1.Canvas.PenPos.X:=
100;
form1.Canvas.PenPos.Y:=
100;

form1.Canvas.PenPos.X:=
100;
form1.Canvas.PenPos.Y:=
100;

Form1.Canvas.PenPos:=Point(100,100);

Form1.Canvas.PenPos:=Point(100,100);

background image

TCanvas

Rectangle

procedure Rectangle(X1: Integer; Y1: Integer; X2: Integer; Y2: Integer);
procedure Rectangle(var Rect: TRect);

1)
Form1.Canvas.Rectangle(100,100,200,200);

2)
Form1.Canvas.Rectangle(Rect(100,100,200,200));

2’)
var
Prostokat:TRect;
begin
Prostokat:=Rect(100,100,200,200);
Form1.Canvas.Rectangle(Prostokat);
end;

8

Jakie wady w zastosowaniu ma
Rectangle w porównaniu z
MoveTo, LineTo?

background image

TCanvas

FillRect

procedure FillRect (X1, Y1, X2, Y2 : Integer);
procedure FillRect (const Rect : TRect);

Prostokąt wypełniony kolorem

Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.FillRect(0,0,200,100);

Lub
Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.FillRect(rect(0,0,200,100));

9

background image

Tcanvas

Ellipse

procedure Ellipse (X1, Y1, X2, Y2 :

Integer);

procedure Ellipse (const Rect :

TRect);

Form1.Canvas.Ellipse(0,0,200,100);

lub

Form1.Canvas.Ellipse(rect(0,0,200,100));

10

background image

TCanvas

Arc

procedure Arc (X1, Y1, X2, Y2,

X3, Y3, X4, Y4: Integer);

Procedura rysująca wycinek elipsy

(łuku)

1) Rysowanie w kierunku

przeciwnycm do ruchu wskazówek
zegara

2) Prawe ramie kąta rozwarcia łuku

to kierunek powstały w wyniku
połączenie punktów środka elipsy i
punktu nr 3

3) Lewe ramie kąta rozwarcia łuku to

kierunek powstały w wyniku
połączenie punktów środka elipsy i
punktu nr 4

11

background image

TCanvas

Arc

Form1.Canvas.Arc(
0,10,
200,410,
300,110,
100,0);

Jak narysować okrąg, wycinek łuku

kołowego?

12

background image

TCanvas

Polyline

Form1.Canvas.Polyline(
[Point(100,100),
Point(100,200),
Point(200,200),
Point(200,100),
Point(100,100)]);

13

background image

TCanvas

Polygon

procedure Polygon(var Points: array of

TPoint);

Form1.Canvas.Polygon(
[Point(100,100),
Point(100,200),
Point(200,200),
Point(200,100)]);

Tablica może być tablicą dynamiczną, może być też podtablicą (użycie funkcji

slice);

14

var
Punkty:array [0..100] of
TPoint;
begin
punkty[0]:=Point(100,100)
;
punkty[1]:=Point(200,100)
;
punkty[2]:=Point(200,200)
;
punkty[3]:=Point(100,200)
;
Form1.Canvas.Polygon(
slice(Punkty,4));
end;

background image

TCanvas

TBrush

Brush (ang. pędzel, szczotka)- wzorzec i

kolor wypełniania

Wybrane właściwości:

- Bitmap

: zawiera zewnętrzną bitmapę

obrazu definiującego wzorzec wypełnenia

- Color

: definiuje kolor wypełnienia

- Handle

: udostępnia „uchwyty” do

systemowych definicji wzorców Brush

- Style

: styl wypełniania (wypełnienie nie

musi być jednolite);

15

background image

TCanvas

TBrush

Kolejne przykłady będą zawierały kod

(oznaczony jak „

rysowanie wielokąta

”) w

postaci:

Form1.Canvas.Polygon([
Point(50,100),
Point(100,0),
Point(220,50),
Point(250,100),
Point(100,200)]);

16

background image

TCanvas

TBrush.Color

Form1.Canvas.Brush.Color:=clRed;

Rysowanie wielokąta

Form1.Canvas.Brush.Color:=RGBToColor($00,$

ff,$00);

Rysowanie wielokąta

17

background image

TCanvas

TBrush.Color

Form1.Canvas.Brush.Style:=bsCross;

Rysowanie wielokąta

bsBDiagonal; bsDiagCross

bsSolid

18

Dostępne wartości:
bsSolid, bsCross, bsClear, bsDiagCross, bsBDiagonal,
bsHorizontal, bsFDiagonal, bsVertical

background image

TCanvas

TBrush.Bitmap

var
Bitmapa_Pedzla : TBitmap;
begin
Bitmapa_Pedzla:=TBitmap.Create;
Bitmapa_Pedzla.LoadFromFile(

'c:/gik.bmp

');

Canvas.Brush.Bitmap:=Bitmapa_Pedzla;
end;

Rysowanie wielokąta

19

background image

TCanvas

TPen

Pen (ang.pióro, pisak);
To narzędzie do rysowania linii, punktów etc.
W odróżnieniu do Brush nie określa sposobu wypełniania

rysowanych kształtów a jedynie ich krawędzi.

Główne właściwości:

Color

kolor „pisaka”, ustawiany podobnie jak w

Brush;

Style – styl „pisaka” tj. wzór jaki będzie on

pozostawiał;

Width

szerokość „pisaka”’;

Mode – sposób pokrywania zamalowanej już

powierzchni

20

background image

TCanvas

TPen.Color

Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.Pen.Color:=clRed;

Rysowanie wielokąta

21

background image

TCanvas

TPen.Width

Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.Pen.Color:=clRed;
Form1.Canvas.Pen.Width:=10;

Rysowanie wielokąta

22

background image

TCanvas

TPen.Style

Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.Pen.Color:=clRed;
Form1.Canvas.Pen.Width:=10;
Form1.Canvas.Pen.Style:=psDashDotD

ot;

Rysowanie wielokąta

23

Dostępne wartości:
psSolid-ciągły
psDash – kreskowany
psDot - kropkowany
psDashDot - kreska , kropka
psDashDotDot – kreska,
kropka,kropka
psClear - przezroczysta

background image

TCanvas

TPen.Mode

Form1.Canvas.Brush.Color:=clGreen;
Form1.Canvas.Pen.Color:=clRed;
Form1.Canvas.Pen.Width:=25;

Rysowanie wielokąta

Form1.Canvas.pen.Mode:=pmMaskNotPen;
Form1.Canvas.MoveTo(0,0);
Form1.Canvas.lineTo(300,300);

24

background image

TCanvas

TPen.Mode

Operacje logiczne podczas rysowanie kolorem „pisaka” P i kolorem „tła” T po

jakim rysuje pisak:

pmBlack – 0 (zawsze czarny),
pmWhite – 1 (zawsze biały),
pmNop – T (bez zmiany),
pmNot – not T (negacja koloru T),
pmCopy – P (standardowe rysowanie w kolorze T),
pmNotCopy – not P (negacja koloru P),
pmMergePenNot – P lub negacja T,
pmMaskPenNot – P lub negacja T,
pmMergeNotPen – negacja P lub T,
pmMaskNotPen – negacja P i T, (logiczne „i”)
pmMerge – P lub T,
pmNotMerge – negacja (P lub T )
pmMask – P i T, (logiczne „i”)
pmNotMask – negacja (P and T)
pmXor – P xor T,
pmNotXor – negacja(P xor T).

Operacje logiczne podczas rysowanie kolorem „pisaka” P i kolorem „tła” T po

jakim rysuje pisak:

pmBlack – 0 (zawsze czarny),
pmWhite – 1 (zawsze biały),
pmNop – T (bez zmiany),
pmNot – not T (negacja koloru T),
pmCopy – P (standardowe rysowanie w kolorze T),
pmNotCopy – not P (negacja koloru P),
pmMergePenNot – P lub negacja T,
pmMaskPenNot – P lub negacja T,
pmMergeNotPen – negacja P lub T,
pmMaskNotPen – negacja P i T, (logiczne „i”)
pmMerge – P lub T,
pmNotMerge – negacja (P lub T )
pmMask – P i T, (logiczne „i”)
pmNotMask – negacja (P and T)
pmXor – P xor T,
pmNotXor – negacja(P xor T).

25

background image

TCanvas

ClipRect

Funkcja określająca wielkogść „płótna”

– obszaru na którym istnieje
możliwość rysowania – poza nim nic
nie zostanie narysowane.

ShowMessage('Max X Canvas to:’

+inttostr(Form1.Canvas.ClipRect.Ri
ght
));

26

background image

TCanvas

TFont

Font (ang.czcionka) – obiekt obsługujący

formatowanie umieszczanego na TCanvas
tekstu.

Główne własności to
Color – jak w poprzednich obiektach
Height, Size – dwa parametry powiązane

ze sobą określające wielkość czcionki

Name – nazwa kroju pisma
Style – style (poczyła, pogrubiona itp.

czcionka)

27

background image

TCanvas

TFont .Size i .Height

28

Font.Height := (Font.Size * Font.PixelsPerInch /72) –
liczba typu Integer

background image

TCanvas TextOut

TFont .Name

procedure TextOut(X: Integer; Y: Integer; const Text:

string);

Przykład użycia
Form1.Canvas.Font.Name:='Arial';
Form1.Canvas.Font.Size:=10;
Form1.Canvas.TextOut(10,10,'Geodezja');
Form1.Canvas.Font.Size:=15;
Form1.Canvas.TextOut(20,29,'I');
Form1.Canvas.Font.Name:='Comic Sans MS';
Form1.Canvas.Font.Size:=25;
Form1.Canvas.TextOut(10,45,'Kartografia');

29

background image

TCanvas TextOut

function TextHeight (const Text : string) : Integer;

– wysokość tekstu w pikselach

function TextWidth (const Text : string) : Integer;

– szerokość tekstu w pikselach

Przykład użycia
var
pozycja_x:integer;
begin
Form1.Canvas.Font.Name:='Arial';
Form1.Canvas.font.Size:=10;
pozycja_x:=10;
Form1.Canvas.TextOut(pozycja_x,10,'Geodezja ');
pozycja_x:=pozycja_x+Form1.Canvas.

TextWidth

('Geodezja ');

Form1.Canvas.TextOut(pozycja_x,10,'I ');
pozycja_x:=pozycja_x+Form1.Canvas.

TextWidth

('I ');

Form1.Canvas.TextOut(pozycja_x,10,'Kartografia');
end;

30

background image

TCanvas TextOut

TFont .Style

Własność typu wyliczeniowego mogąca

przyjąć jedną lub kilka z
zdefiniowanych wartości: fsBold,
fsItalic, fsUnderline, fsStrikeOut

31

Form1.Canvas.Font.style:=[];
Form1.Canvas.TextOut(10,10,'Geodezja i Kartografia');
Form1.Canvas.Font.style:=[fsBold];
Form1.Canvas.TextOut(10,25,'Geodezja i Kartografia');
Form1.Canvas.Font.style:=[fsItalic];
Form1.Canvas.TextOut(10,40,'Geodezja i Kartografia');
Form1.Canvas.Font.style:=[fsItalic,fsBold];
Form1.Canvas.TextOut(10,55,'Geodezja i Kartografia');
Form1.Canvas.Font.style:=[fsItalic,fsBold,fsStrikeOut];
Form1.Canvas.TextOut(10,70,'Budownictwo');

background image

TCanvas

CopyMode

Parametr określający jak będą wykonywane operacje kopiowania fragmentów obrazu.
T-kolor piksela tła, O-kolor piksela kopiowanego (nazwa wartości – działanie)
cmBlackness –
kolor czarny
cmDstInvert – negacja T
cmMergeCopy – O and T (logiczne i)
cmMergePaint – (negacja O) lub T,
cmNotSrcCopy – negacja O,
cmNotSrcErase –
negacja(O lub T),
cmPatCopy – wzorzec (pisaka),
cmPatInvert – wzorzec xor T,
cmPatPaint – (negacja O lub wzorzec) lub T,
cmSrcAnd – O and T

cmSrcCopy – O – domyślna wartość

cmSrcErase – O and (negacja T),
cmSrcInvert – O xor T,
cmSrcPaint – O or T,
cmWhiteness – kolor biały

32

background image

TCanvas

CopyRect

procedure CopyRect (
Gdzie _prost: TRect;
Skąd_Canvas : TCanvas;
Skąd_prst : TRect);

Procedura kopiująca prostokątne

fragmenty obrazu w nowe
miejsca.

Form1.Canvas.CopyRect
(rect(300,300,400,400),
Form1.Canvas,
rect(0,0,300,300));

33

background image

Tcanvas

Draw

var
Obrazek:TBitmap;
begin
Obrazek:=TBitmap.Create;
Obrazek.LoadFromFile('c:/gik.bmp');
Form1.Canvas.Draw(0,0,obrazek);
Obrazek.Free;
end;

34

procedure Draw (X, Y : Integer; Graphic :
TGraphic);

„Wkleja” obraz (oryginalny rozmiar)
przechowywany w TGraphic np.TBitmap

background image

TCanvas

StrechDraw

var
Obrazek:TBitmap;
begin
obrazek:=TBitmap.Create;
obrazek.LoadFromFile('c:/gik.bmp');
form1.canvas.StretchDraw(rect(0,0,50,50),obrazek);
form1.canvas.StretchDraw(rect(50,50,250,250),obrazek);
obrazek.Free;
end;

35

procedure StrechDraw (const Rect :
Trect;Graphic : TGraphic);
„Wkleja” rozciągniety obraz przechowywany
w TGraphic np.TBitmap

background image

TCanvas

Pixels

Dostęp do pojedynczego piksela
Zarówno do zapisu jak i odczytu

36

var
i:integer;
begin
For i:=0 to 100 do
Form1.Canvas.Pixels[i,i]:=$0000ff;

ShowMessage(inttostr(Form1.Canvas.Pixels[0,
0]));
end;

var
i:integer;
begin
For i:=0 to 100 do
Form1.Canvas.Pixels[i,i]:=$0000ff;

ShowMessage(inttostr(Form1.Canvas.Pixels[0,
0]));
end;

background image

Dla zainteresowanych

Przyspieszenie operacji na

pojedynczych pikselach – funkcja

Scanline

37

background image

TBitmap

Bitmapy, tj. mapy bitowe, są reprezentacją obrazu rastrowego w pamięci wewnętrznej

(RAM) lub zewnętrznej (strumien, plik).

Bitmapę można przechowywać w pamięci za pomocą obiektu TBitmap.

TBitmap nie jest komponentem, jest obiektem i można skopiować zawartość bitmapy na

„inny” Canvas

TBitmap jest Obiektem – przed jej użyciem należy więc utworzyć jego instancję:

Najczęścięj wykorzystywane metody TBitmap to:
LoadFromFile(‘nazwa_pliku.bmp’);
SaveToFile(‘nazwa_pliku.bmp’);

Najczęściej wykorzystywanymi właściwościami:
Width, Height,
Canvas – dzięki której istnieje możliwość skopiowanie Bitmapy na płótno np. Formularza.

38

Var
Obrazek:TBitmap;
Begin
Obrazel:=TBitmap.Cr
eate;
//użycie Bitmapy
//i zwolnienie jej
zasobów
Obrazek.Free; //!!!!
End;

Var
Obrazek:TBitmap;
Begin
Obrazel:=TBitmap.Cr
eate;
//użycie Bitmapy
//i zwolnienie jej
zasobów

Obrazek.Free; //!!!!

End;

background image

TImage

(komponent)

Przeznaczony do wyświetlania obrazów

rastrowych zapisanych w formatach:
BMP,XMP,PNG,PBM,PGM,PPM,JPG,ICNS,
CURICO,WMF.

Najczęściej wykorzystywane metody:
(metoda podobiektu Picture)
Picture.LoadFromFile(‘grafika.bmp’);
Najczęściej wykorzystywane właściwości:
Width,Height,Strech,Autosize

39


Document Outline


Wyszukiwarka

Podobne podstrony:
wykład III, PROGRAM WYKŁADU 3
wykład IV programowanie Lazarus
Podstawy programowania (wykład III)
Podstawy programowania (wykład III)
wykład I programowanie Lazarus
TBL WYKŁAD III Freud
wykład III Ubezpieczenia na życie2011
wykład III pns psychopatologia
WYKLAD III diagnoza psychologiczna
MAKROEKONOMIA WYKŁAD III
Zarzadzanie strategiczne w organizacjach publicznych wyklad III listopad 2010
FARMAKOLOGIA WYKŁAD III RAT MED ST
FPP wykład III
wykład III bud ciało i szybkość
BHP - wykład III - biomechanika, materiauy

więcej podobnych podstron