Zobrazení části obrázku v DelphiX - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Zobrazení části obrázku v DelphiX

12. března 2001, 00.00 | Potřebujete zobrazit pouze část obrázku v DelphiX ? Ukážeme vám, jak na to!

Jistě jste na tento problém již narazili. Máte velký (klidně i malý) obrázek, a potřebujete zobrazit pouze jeho část. Jak na to, vám ukáže dnešní článek.

Na začátek bychom si měli říci, jak vůbec DelphiX k zobrazení části obrázků přistupují. Je to celkem jednoduché - rozdělí obrázek na několik menších, které budou mít šířku PatternWidth a výšku PatternHeight (nastavuje se rovnou ve vlastnosti obrázku v DXImageListu) a poté zobrazíte část obrázku vlastností PatternIndex (poslední parametr procedury Draw).
Můžeme si to např. vyzkoušet na jednoduchém obrázku, který jsem nakreslil. Má velikost 120x120 pixelů a PatternWidth i PatternHeight jsou nastaveny na 30, tudíž vznikne 16 možných částí obrázku (pro lepší pochopení je v každé části obrázku nakresleno, která část velkého obrázku se právě zobrazuje). Zde je již obrázek a zdrojový kód procedury DXTimer1.OnTimer:


procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
 if not DXDraw1.CanDraw then exit;

 DXDraw1.surface.Fill(0);

 DXImageList1.Items[0].Draw(DXDraw1.surface,
 20,20,skip);

 with DXDraw1.Surface.canvas do
  begin
   TextOut(0,0,'PatternIndex: '+IntTOStr(skip));

   release;
  end;

 Inc(skip);
 if skip = 16 then skip:=0;

 DXDraw1.Flip;
end;

Nyní ještě definujte proměnnou skip typu integer, která nám bude říkat, kterou část obrázku máme právě zobrazovat, do procedury OnCreate přidejte skip:=0; a program můžete spustit. Pokud je vše správně nastaveno, zobrazuje se vám postupně jednoduchá animace.

Kromě vlastností PatternWidth a PatternHeight obsahuje vlastnost obrázku v DXimageListu ještě dvě vlasnosti, která s tímto blízce souvisí. Jedná se o SkipWidth a SkipHeight, které mezi jednotlivými částmi obrázků vynechají nastavené mezery. Jednoduchý příklad je, pokud máte pohyb spritu v jednom obrázku a pro lepší přehled máte mezi jednotlivými částmi obrázku zelené rámečky. Samozřejmě byste mohli tyto rámečky vymazat a poté zobrazovat obrázek, ale lepší je si prostě podle šířky rámečků nastavit SkipWidth a SkipHeight a rámečky vidět nebudou. Pro demonstraci použijeme již hotový projekt, pouze nahrajeme nový obrázek, tentokrát o velikost 160 x 160 pixelů. PatternWidth a PatternHeight budou stejné jako minule (30 pixelů), ovšem mezi jednotlivými částmi budou desetipixelové mezery. Změníme tedy SkipWidth a SkipHeight na 10 a program můžete spustit. Zde je pro lepší pochopení ještě obrázek použitého obrázku a screenshot projektu.



Nakonec ještě podotknu, že tento článek vzniknul hlavně kvůli mnoha dotazům právě na tento problém. Máte-li ještě nějaký dotaz, stačí napsat...

ZDE si můžete stáhnout dnes vytvořený projekt.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: