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
| « poprzednia | następna » |
|---|
Prowadzącym ten blog jest od 6 lat Krzysztof "Procek" Ścira - Obecnie student AGH. Blog traktujący o szeroko pojętej IT - można tu poczytać o zagadnieniach związanych z m. in. programowaniem, grafiką, hardware i systemami operacyjnymi. Warto dodać kanał RSS tego bloga do swojego czytnika.[Więcej]