Delphi - Képek, képrészek másolása

Canvas objektum 6. rész

forráskód letöltése

Ha készítendő rajzunkon néhány előre elkészített képet is fel szeretnénk használni, akkor erre is van lehetőségünk. Gondoljunk például egy olyan komponensre, amin kis ikonok is megjelenhetnek (pl. TSpeedButton). A cikksorozat ezen része az ilyen képek felhasználásának, illetve képrészletek másolásának módjáról szól. A legegyszerűbb módszer egy kép kirajzolására, amikor megadjuk azt a pozíciót (koordinátát), ahová képet szeretnénk másolni, illetve megadjuk magát a képet. Erre való a Draw eljárás.
var
  kep. TBitmap;
...
  Canvas.Draw(30, 40, kep);
Az első két paraméter a kép pozíciója, míg a harmadik maga a kép. A kép egy TGraphic osztályból származó objektum lehet, a fenti példában TBitmap típusú. Ha ez utóbbi típust használjuk, akkor a kép megjelenítésénél a CopyMode property értéke is figyelembe lesz véve. Ez utóbbiról később még lesz szó.

Előfordulhat olyan eset, amikor egy bitképet nem az eredeti méretében szeretnénk megjeleníteni. Ekkor használhatjuk a StretchDraw eljárást. Ennek első paramétere egy TRect típusú érték, amiben nem csak a kép bal felső sarkának koordinátáit tudjuk megadni, hanem a jobb alsót is. A második paraméterként megadott kép tehát nem az eredeti méretben, hanem a koordináták által meghatározott méretben jelenik meg.
  StretchDraw(Rect(100, 50, 350, 120), kep);

Ha egy képnek csak egy bizonyos részletét szeretnénk a Canvas-ra másolni, akkor erre a CopyRect eljárást használjuk. Ennek első paramétere TRect típusú, és a célterület koordinátáit adja meg. A második paraméter az a Canvas, amiről a képrészletet másolni szeretnénk. Az utolsó paraméter szintén TRect típusú, és a másolandó terület koordinátáit tartalmazza.
  Canvas.CopyRect(Rect(10, 10, 80, 80), kep.Canvas, Rect(x0, y0, x1, y1));

Mindhárom műveletre hatással van a CopyMode property értéke. Ebben konstansokkal adhatjuk meg, hogy milyen logikai művelettel kerüljenek a képek másolásra, vagyis a forrás és a célkép pixelei között milyen logikai műveletet használjon az új kép pixeleinek kiszámításakor.
A következő értékeket adhatjuk meg:
  • cmBlackness: az új pixelek színe fekete lesz.
  • cmDstInvert: invertálja a célterület pixeleit.
  • cmMergeCopy: a célkép és a forráskép pixelei között ÉS műveletet végez.
  • cmMergePaint : a forráskép pixeleit invertálja és a célkép pixelei között VAGY műveletet végez.
  • cmNotSrcCopy: invertálja a forrás kép pixeleit.
  • cmNotSrcErase: a pixelek közötti VAGY műveletet végez, és invertálja az eredményt.
  • cmPatCopy: a forrás mintát másolja.
  • cmPatInvert: kombinálja a forrás mintát a célképpel XOR műveletet használva.
  • cmPatPaint: a forrás kép pixeleit kombinálja VAGY művelettel a forrás mintával, és az eredményt kombinálja a célképpel, szintén VAGY művelettel.
  • cmSrcAnd: a forráskép és a célkép pixelei között ÉS műveletet végez.
  • cmSrcCopy: átmásolja a forrásképet a célképre.
  • cmSrcErase: invertálja a célképet, és az eredményt kombinálja a forrás képpel ÉS műveletet használva.
  • cmSrcInvert: XOR művelettel kombinálja a célkép és a forráskép pixeleit.
  • cmSrcPaint: OR művelettel kombinálja a célkép és a forráskép pixeleit.
  • cmWhiteness: a célkép pixelei fehérek lesznek.


Canvas objektum cikksorozat