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 Function
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)
Aihe on jo aika vanha, joten et voi enää vastata siihen.