C# - DrawArc függvény

Graphics osztály 1. rész

forráskód letöltése
Ha Windows-os alkalmazásunk grafikát használ, akkor ehhez elengedhetetlen volt a GDI használata. A Windows XP megjelenésével jelentős fejlődésen ment keresztül és immár GDI+ névvel szerepel az a grafikus interfész, melyen keresztül számtalan grafikai lehetőség tárul elénk. A GDI+ megvalósítása egyetlen GdiPlus.dll nevű állományból áll. Fontos tudnunk, hogy ezt nem csak a Windows XP alatt használhatjuk, hanem a Windows NT 4 SP6, Windows 2000, Windows 98 és Windows Millennium Edition operációs rendszereken is, így programjaink grafikai lehetőségeit kibővíthetjük ezen rendszerek alatt is, használjunk akár C, Basic, Delphi vagy bármilyen egyéb fejlesztői környezetet.
A GDI (Graphic Device Interface) egy programozók által elérhető Windows API. Célja, hogy az alkalmazások számára biztosítsa a grafikus támogatást. Olyan eljárások és függvények gyűjteménye, amelyek nagyban megkönnyítik a grafikus effektusok, formázott szövegek és egyéb objektumok megjelenítését a képernyőn és a nyomtatón egyaránt. Két alapvető részből áll: Win32 GDI és kernel-mode GDI. Az előbbi az alkalmazások, utóbbi pedig a kernel módú grafikus meghajtók (az eszközmeghajtók is használhatják) számára készült. A Win32 GDI közvetlenül meghívható programból a GDI32.DLL használatával (a %systemroot%\system32 könyvtárban található), míg a kernel-mode GDI-t főleg az opercációs rendszer hívja meg a WIN32K.SYS fájlból (helye ugyanott). Mindkettő egyik oldalról kapcsolatot teremt a fizikai eszközzel a másik oldalon ezt metódusokon, tulajdonságokon és eseményeken keresztül jeleníti meg, ezért a programozó számára eszköz-független környezetet biztosít (a Windows nem is teszi lehetővé a programoknak, hogy közvetlenül elérjék az eszközöket).
Mi a GDI+ és milyen fő részekre osztható?
A GDI továbbfejlesztéseként, számos új technológiát magában foglalva megtalálható a Windows XP és Windows .NET Server (BizTalk, Commerce, Exchange, SharePoint Portal, stb.) operációs rendszerekbe beépítve és gyakorlatilag bármilyen fejlesztőkörnyezetben felhasználható. A GDIPLUS.DLL-en keresztül hívható meg. Windows XP előtti rendszerekben is használható, ehhez először a kliensgép rendszermappájába kell elhelyezni. A Microsoft ezt jogilag lehetővé teszi, sőt letölthető a honlapjukról a http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdkredist.htm címről vagy a www.microsoft.com oldalon a keresőbe írjuk be: GdiPlus.dll.
Három alapvető részre bontható
2D vektor grafika:
Magában foglalja az úgynevezett rajz primitívek (vonalak, görbék, Bézier görbék, alakzatok (téglalap, kör, stb.)) készítését, a képeket leíró matematikai függvényekkel.
Bitképek kezelése:
Teljes körű a bitképek támogatása különböző színmélységben, felbontásban, formátumban. Ezenkívül a velük végzett fájlműveleteket is támogatja
Tipográfia:
Az elkészült ábrák különböző eszközökön való megjelenítésének lehetővé tétele a legjobb minőségben. Egy papíron megjelent rajz nem biztos, hogy egy képcsöves monitoron ugyanúgy néz ki, mint egy LCD kijelzőn (sőt biztos, hogy nem) vagy a nyomtatón. A GDI+ külön foglalkozik ezen problémák elhárításával.
Mennyivel tud többet a GDI+, mint az elődje?
Színátmenet támogatás:
Lineáris átmenetek készíthetők vele, amivel különböző alakzatokat lehet kitölteni. Meg kell adni a kezdő és végszíneket, a köztük lévő átmenetet a GDI+ kiszámolja. Beállítható az is, hogy vízszintesen, függőlegesen, egy középpontból vagy valamelyik sarokból indulva történjen mindez.
Cardinal Splines:
Egy vonal leírható referenciapontok halmazaként. Ez annyit jelent, hogy megadunk referencia pontokat, amelyeken a vonalnak át kell mennie. A pontok közti szakaszt a GDI+ fogja felépíteni, méghozzá görbékből, mindig figyelve a következő pont utáni irányt. Ezzel a technológiával egyenletesebb, élektől mentes szakaszokat kapunk, ellentétben azzal a megoldással, amikor egyenesek kötik össze a pontokat.
Independent Path Objects:
A GDI-ben az objektumok létrejötte után a művelet befejezéséhez vezető út törlődött. A GDI+-ban nem, ezért több objektum is felépíthető az út ismételt létrehozása nélkül.
Transzformációk és mátrix objektumok:
Megjelent a mátrix objektum egy hatásos eszközt adva a különböző transzformációk könnyű és gyors elvégzéséhez. Egy objektum összekapcsolható egy mátrixszal és képernyőn a kettő összesítéséből származó eredmény jelenik meg.
Skálázható területek:
A területek (Regions) skálázhatók, elforgathatók és átalakíthatók lettek.
Alpha Blending:
A Windows 2000-ben jelent meg először ez a technológia az operációs rendszer szintjén, most a GDI+ részéről teljes támogatást kapunk, hogy beépítsük saját alkalmazásainkba. A rajzolt objektum és a háttér közötti átlátszóságot jelenti. Például kirajzolunk egy teljesen hétköznapi Windows ablakot a képernyőre, de látszik alatta az Asztal és a rajta lévő ikonok. Természetesen az átlátszóság mértéke állítható.
Több képformátum támogatása:
A GDI+ Image, Bitmap és Metafile osztályai lehetővé teszik a képek mentését, betöltését és különböző formátumokra való átalakítását. A következő képformátumok támogatásával: BMP, EMF, GIF, JPEG, EXIF, PNG, TIFF, ICON, WMF.
Az első példaprogram
Sorozatunk első részében a Graphics osztály DrawArc függvényével ismerkedünk részletesebben, illetve megvizsgáljuk, hogy miként tudunk egyáltalán rajzolni, milyen lépések kellenek ahhoz, hogy használjunk saját grafikát alkalmazásunkban.
Ahhoz, hogy a Form területére rajzolhassunk, hozzunk létre egy eseménykezelő függvényt annak Paint eseményéhez. Ezen belül kapunk egy PaintEventArgs típusú paramétert, melyben számunkra két érdekes property található. Az egyik a Graphics, mely tartalmazza azt a Graphics osztályt, amelyet felhasználhatunk rajzaink elkészítéséhez. A másik a ClipRectangle, mely egy Rectangle típusban megadja azt a vágási területet, melyen kívülre ugyan rajzolhatunk, de az már nem lesz látható. Alapértelmezett esetben egy Form-nál annak teljes kliens területe lesz a ClipRectangle.
A DrawArc függvény egy körívet képes kirajzolni. Ehhez meg kell adnunk a befoglaló téglalapot, valamint a kezdő és befejező szöget és egy ceruzát, mellyel a rajzolás elvégezendő.
A rajzoláshoz szükséges ceruzát a Pen osztály képviseli, ennek létrehozása egyszerűen történik: egy szín és a vonalvastagság megadásával. A Pen osztályról a sorozat későbbi részeiben még részletesen lesz szó.
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      Graphics g = e.Graphics;
      Pen p = new Pen(Color.Blue, 1);
      g.DrawArc(p, 10, 10, 250, 150, 0, trackBar1.Value);
      g.DrawArc(p, e.ClipRectangle, 0, 90);
    }
Lássuk most miként is működik a DrawArc függvény, melynek négy változata van.
DrawArc
Osztály: System.Drawing.Graphics
public void DrawArc(
Pen pen,
Rectangle rect,
float startAngle,
float sweepAngle
);
A DrawArc függvény egy adott ellipszis egy részét, vagy akár a teljes egészét képes kirajzolni.
Paraméterek
Pen pen
A rajz vonalának tulajdonságait a pen paraméteren keresztül adhatjuk meg.
Rectangle rect
Az ellipszis befoglaló téglalapját adhatjuk meg Rectangle típusban a rect paraméterben.
float startAngle
Az ellipszis ívének kezdő szöge fokban. Az itt megadott értéknél kezdődik el a rajzolás. A nulla fok vízszintesen jobbra mutat. Nagyobb szög az óra járásával egyező irányban forgatja el a rajz kezdőpontját.
float sweepAngle
Az ellipszis ívének záró szöge fokban. Az itt megadott értéknél végződik a rajz.
DrawArc
Osztály: System.Drawing.Graphics
public void DrawArc(
Pen pen,
RectangleF rect,
float startAngle,
float sweepAngle
);
A DrawArc függvény egy adott ellipszis egy részét, vagy akár a teljes egészét képes kirajzolni.
Paraméterek
Pen pen
A rajz vonalának tulajdonságait a pen paraméteren keresztül adhatjuk meg.
RectangleF rect
Az ellipszis befoglaló téglalapját adhatjuk meg RectangleF típusban a rect paraméterben. A DrawArc függvény e változatát akkor érdemes használni, ha koordinátákat számítjuk és előfordulhatnak nem egész értékek is.
float startAngle
Az ellipszis ívének kezdő szöge fokban. Az itt megadott értéknél kezdődik el a rajzolás. A nulla fok vízszintesen jobbra mutat. Nagyobb szög az óra járásával egyező irányban forgatja el a rajz kezdőpontját.
float sweepAngle
Az ellipszis ívének záró szöge fokban. Az itt megadott értéknél végződik a rajz.
DrawArc
Osztály: System.Drawing.Graphics
public void DrawArc(
Pen pen,
int x,
int y,
int width,
int height,
int startAngle,
int sweepAngle
);
A DrawArc függvény egy adott ellipszis egy részét, vagy akár a teljes egészét képes kirajzolni.
Paraméterek
Pen pen
A rajz vonalának tulajdonságait a pen paraméteren keresztül adhatjuk meg.
int x
A kirajzolandó ív befoglaló téglalap bal oldalának koordinátája.
int y
A kirajzolandó ív befoglaló téglalap bal tetejének koordinátája.
int width
A kirajzolandó ív befoglaló téglalapjának szélessége.
int height
A kirajzolandó ív befoglaló téglalapjának magassága.
int startAngle
Az ellipszis ívének kezdő szöge fokban. Az itt megadott értéknél kezdődik el a rajzolás. A nulla fok vízszintesen jobbra mutat. Nagyobb szög az óra járásával egyező irányban forgatja el a rajz kezdőpontját.
int sweepAngle
Az ellipszis ívének záró szöge fokban. Az itt megadott értéknél végződik a rajz.
DrawArc
Osztály: System.Drawing.Graphics
public void DrawArc(
Pen pen,
float x,
float y,
float width,
float height,
float startAngle,
float sweepAngle
);
A DrawArc függvény egy adott ellipszis egy részét, vagy akár a teljes egészét képes kirajzolni.
Paraméterek
Pen pen
A rajz vonalának tulajdonságait a pen paraméteren keresztül adhatjuk meg.
float x
A kirajzolandó ív befoglaló téglalap bal oldalának koordinátája.
float y
A kirajzolandó ív befoglaló téglalap bal tetejének koordinátája.
float width
A kirajzolandó ív befoglaló téglalapjának szélessége.
float height
A kirajzolandó ív befoglaló téglalapjának magassága.
float startAngle
Az ellipszis ívének kezdő szöge fokban. Az itt megadott értéknél kezdődik el a rajzolás. A nulla fok vízszintesen jobbra mutat. Nagyobb szög az óra járásával egyező irányban forgatja el a rajz kezdőpontját.
float sweepAngle
Az ellipszis ívének záró szöge fokban. Az itt megadott értéknél végződik a rajz.

Graphics osztály cikksorozat