Reklama

Recenzje

Maski

maski

Podczas programowania w VCL często zdarza się, że chcemy mieć większą kontrolę nad wyglądem aplikacji. Sunday ćwiczył operacje na maskach w Delphi i postanowił podzielić się kodem. Kod Sundaya razem z komentarzami poniżej.

Procek

Maski służą do wyświetlania grafiki o kształcie innym niż prostokąt.

Aby szybko utworzyć maski do plików niezbędne są przynajmniej dwie zmienne globalne np.:

var ImageList:TImageList; // lista, na której będą przechowywane maski
obrazek:tbitmap; // ta zmienna przechowuje obraz, którego chcesz użyć do stworzenia maski
Zajmij dla nich pamięć za pomocą konstruktora Create,
a do zmiennej 'obrazek' załaduj obraz, z którego chcesz utworzyć maskę:
obrazek := tbitmap.Create;
obrazek.LoadFromFile ('C:\b1.bmp'); // tutaj w nawiasach podajesz ścieżkę do pliku
ImageList :=TImageList.Create (nil);

Wpisz procedurę:

procedure zrobmaske(obraz:tbitmap; kolor:tcolor; var lista:timagelist);
var bitmap:tbitmap;
begin
Bitmap :=TBitmap.Create;
Bitmap.Assign(obraz);
lista.Width :=bitmap.Width;
Lista.Height :=bitmap.Height;
Lista.AddMasked (bitmap,kolor);
end;

Powyższa procedura służy do tworzenia maski.
Parametry:
obraz – obraz, z którego chcesz utworzyć maskę. np. zmienna obrazek.
Kolor – kolor tła (Ten kolor będzie niewidzialny) np. rgb (0,0,0)-czarny
lista – lista, na której będzie utworzona maska np. imagelist

Teraz wpisz:

procedure rysujmaske (lista:timagelist; Canvas:TCanvas; X,Y:integer; nr:integer);
begin
lista.Draw (Canvas, x,y,nr);
end;

Ta procedura rysuje maskę. Parametry:
lista – lista, na której są utworzone maski.
Canvas - "plotno", czyli obiekt typu canvas, na którym maska ma być narysowana.
X,Y – współrzędne górnego, lewego punktu, w którym maska ma być narysowana.
Nr - numer maski.

Pamiętaj!
Procedura zrobmaskę tworzy maski po kolei zaczynając od 0 np.:
Aby narysować maskę po jednokrotnym użyciu procedury zrobmaske jako parametr nr podajemy 0.
Aby narysować maskę po dwukrotnym użyciu procedury zrobmaske jako parametr nr podajemy 1.
Aby narysować maskę po trzykrotnym użyciu procedury zrobmaske jako parametr nr podajemy 2.
Itd ...

teraz podam kod procedury, która tworzy i rysuje maskę jako animację (możesz ją wkleić np.do procedury button.click):

var ImageList:TimageList;
obrazek1,obrazek2:tbitmap;
i:integer;
 
procedure zrobmaske(obraz:tbitmap; kolor:tcolor; var lista:timagelist);
var bitmap:tbitmap;
begin
Bitmap :=TBitmap.Create;
Bitmap.Assign(obraz);
lista.Width :=bitmap.Width;
Lista.Height :=bitmap.Height;
Lista.AddMasked (bitmap,kolor);
end;
 
procedure rysujmaske (lista:timagelist; Canvas:TCanvas; X,Y:integer; nr:integer);
begin
lista.Draw (Canvas, x,y,nr);
end;
 
{tutaj np. button1.click}
begin
obrazek1 := tbitmap.Create;
obrazek1.LoadFromFile ('C:\b1.bmp'); //tutaj w nawiasach podajesz ścieżkę do pliku
obrazek2 := tbitmap.Create;
obrazek2.LoadFromFile ('C:\b2.bmp'); //tutaj w nawiasach podajesz ścieżkę do pliku
ImageList :=TImageList.Create (nil);
zrobmaske (obrazek1,rgb(0,0,0),imagelist);
zrobmaske (obrazek2,rgb(0,0,0),imagelist);
for i := 1 to 15 do
begin
rysujmaske (imagelist,form1.canvas,1,1,0)
sleep (800);
rysujmaske (imagelist,form1.canvas,1,1,1)
sleep (800);
end;
end;

Na przykład w button2.click

zrobmaske (obrazek1,rgb(0,0,0),imagelist);
rysujmaske (imagelist,form1.canvas,1,1,0);

Sunday

Dodaj komentarz

W komentarzach możesz używać następujących tagów:
[b][/b], [url][/url], [quote][/quote]
Wypowiedzi obraźliwe oraz nie odnoszące się do tematu będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.
Komentarze nie służą do zgłaszania ofert, informowania o błędach, itd. W tym celu proszę o kontakt mailowy.


Kod antysapmowy
Odśwież