Tämä koodivinkki esittelee lyhyesti, kuinka saadaan kuvakaappaus ja kuinka voi piirtää suoraan näytölle.
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 FunctionHuomaa: 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 SubKäyttö:
For i = 0 To 24
DrawToScreen(Image.FromFile("jokutiedosto")) '"jokutiedosto" on piirrettävän tiedoston nimi
System.Threading.Thread.Sleep(250) 'sleepataan
NextNä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)
Aihe on jo aika vanha, joten et voi enää vastata siihen.