Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB.NET: Kuvakaappaus ja näytölle piirto

ErroR++ [15.10.2011 15:08:54]

#

Tämä koodivinkki esittelee lyhyesti, kuinka saadaan kuvakaappaus ja kuinka voi piirtää suoraan näytölle.

Kuvakaappaus

Private Const SRCCOPY As Integer = &HCC0020
Private Declare Function BitBlt _
        Lib "gdi32.dll" ( _
        ByVal hdcDest As IntPtr, _
        ByVal x As Int32, _
        ByVal y As Int32, _
        ByVal Width As Int32, _
        ByVal Height As Int32, _
        ByVal hdcSrc As IntPtr, _
        ByVal xSrc As Int32, _
        ByVal ySrc As Int32, _
        ByVal dwRop As Int32 _
        ) As Boolean

Function Screenshot() As Image
        Dim ScreenImg As Bitmap 'näytön kuva
        Dim ScrGraphics As Graphics = Graphics.FromHwnd(0) 'graphics-olio joka osoittaa työpöytään (hwnd=0)
        ScreenImg = New Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height, ScrGraphics) 'alustetaan kuva
        Dim memGraphics As Graphics = Graphics.FromImage(ScreenImg) 'graphics-olio joka osoittaa näytön kuvaan...
        Dim sourceDC As IntPtr = ScrGraphics.GetHdc 'lähdekahva
        Dim targetDC As IntPtr = memGraphics.GetHdc 'kohdekahva
        '...joka kaapataan nyt!
        BitBlt(targetDC, _
               0, 0, _
               Screen.PrimaryScreen.WorkingArea.Width, _
               Screen.PrimaryScreen.WorkingArea.Height, _
               sourceDC, _
               0, 0, SRCCOPY)
        ScrGraphics.ReleaseHdc(sourceDC) 'vapautetaan kaikki käytetyt resurssit
        ScrGraphics.Dispose()
        memGraphics.ReleaseHdc(targetDC)
        memGraphics.Dispose()
        Return ScreenImg 'valmis kuva
End Function

Näytölle piirtäminen

Huomaa: Näyttö pitää 'puhdistaa' kunnolla piirtämisen jäkeen. Lisäksi pidä huoli siitä, että näytölle piirretään samat grafiikat uudestaan koska kuva ei pysy näytöllä pitkään.

Sub DrawToScreen(ByVal img As Image)
    Dim ScrGraphics As Graphics = Graphics.FromHwnd(0)
    ScrGraphics.DrawImage(img, 0, 0)
    ScrGraphics.Dispose()
End Sub

Käyttö:

For i = 0 To 24
    DrawToScreen(Image.FromFile("jokutiedosto")) '"jokutiedosto" on piirrettävän tiedoston nimi
    System.Threading.Thread.Sleep(250) 'sleepataan
Next

Näytön puhdistus tapahtuu vaikka näin:

Dim ruutukuva As Image = Screenshot() 'otetaan kuva talteen
'piirto
Graphics.FromHwnd(0).Clear(Color.Black) 'tyhjätään näyttö
System.Threading.Thread.Sleep(2500) 'sleepataan
Graphics.FromHwnd(0).DrawImage(ruutukuva, 0, 0) 'palautetaan näyttö (suuremmilla näytöillä voi kestää jopa pari sekuntia)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta