HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Képernyő tartalmának másolása képként


Példaprogram letöltése

7770 bájt

Ebben a példában az nézzük meg, hogy miként tudjuk a képernyő egy részét, vagy akár teljes területét képként lemásolni és tetszőleges módon felhasználni. Így a képet kirajzolhatjuk a Form-ra, vagy akár menthetjük egy Bitmap állományba is. A másoláshoz szükségünk lesz néhány Windows függvény felhasználásához is, mint például a BitBlt, mellyel könnyedén másolhatunk képeket, képrészleteket.

A Windows függvény felhasználásához készítünk egy Win32 nevű osztályt. Ebben külsőként deklarálunk néhány függvényt, melyek majd a további munkánkhoz szükségesek lesznek. A képernyő eléréshez kell majd a GetDC, ReleaseDC, mely a User32.dll-ben van, valamint a már említett BitBlt a másoláshoz, melyet a Gdi32.dll tartalmaz.
  public class Win32
  {
    [DllImport("user32.dll")]
    public static extern IntPtr GetDC(IntPtr hWnd);
    [DllImport("user32.dll")]
    public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
    [DllImport("gdi32.dll")]
    public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
  }
A másoláshoz szükségünk lesz egy képernyő azonosítóra, mellyel annak teljes területéhez hozzáférhetünk, valamint egy Graphics osztályra, ami a Form-ra történő rajzolásban segít.
    private void timer1_Tick(object sender, System.EventArgs e)
    {
      ...
A GetDC függvényt, ha nulla értékű paraméterrel hívjuk, akkor a képernyő eléréséhez szükséges grafikai azonosítót kapjuk vissza, melyet tárolunk a screen változóba.
      IntPtr screen = Win32.GetDC(IntPtr.Zero);
Ezt követően létrehozunk egy Graphics osztályt, melyet a Form azonosítójából származtatunk.
      Graphics g = Graphics.FromHwnd(Handle);
Majd ennek is lekérjük a grafikai azonosítóját és tároljuk a form változóba.
      IntPtr form = g.GetHdc();
Ezek után már hívhatjuk a BitBlt függvényt, mely elvégzi a másolást. Első paraméterként a célterület grafikai azonosítóját kell megadnunk. Ez nyilván a Form lesz. A következő két paraméter a Form-on belül a bal felső sarkot jelöli ki, ahová a kép másolását végezni szeretnénk. 0, 0 érték esetén a kép a Form bal felső sarkába kerül.
Ezt követő két paraméterben a másolandó kép szélességét, magasságát adhatjuk meg, mely most egyezni fog a Form aktuális méretével.
A hatodik paraméterben a forrás terület, vagyis a képernyő grafikai azonosítója kerül megadásra, majd ezt követi a forrás terület x, y koordinátája, vagyis, hogy a képernyő melyik pontjától kezdve történjen a másolás.
Végül a SRCCOPY konstans gondoskodik az elvégezendő műveletről, mely most az egyszerű másolás lesz.
      Win32.BitBlt(form, 0, 0, ClientSize.Width, ClientSize.Height, screen, x, 0, Win32.SRCCOPY);
A másolás végeztével fel kell szabadítanunk a lefoglalt erőforrásokat.
      g.ReleaseHdc(form);
      Win32.ReleaseDC(IntPtr.Zero, screen);                              
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 311. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |