VB - Reload picture   otázka

VB.NET, WinForms

Zdravim,

řeším tu teď jeden problém a to oheldně screenování, mám tento kód

1
2
3
4
5
6
7
8
9
10
Dim Bounds = Screen.PrimaryScreen.Bounds
Dim width = Bounds.Width
Dim height = Bounds.Height
Dim screenshot As System.Drawing.Bitmap
Dim graph As Graphics
screenshot = New System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
graph = Graphics.FromImage(screenshot)
graph.CopyFromScreen(0, 0, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
screenshot.Save("C:/test_" + count + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
count = count + 1

problém je v tom, že když to volám v nějakém itnervalu, tak se udělá první screen test_1.jpg, poté druhý test_2.jpg, ale ten druhý je totožný s tím prvním (i když na ploše něco změním, tak se to na screenu 2. neukže) a tak to jde dál, takže se vlastně udělá pouze ten 1. screen. Dělá to jen když jsem v nějaké hře a má otázka zní, jde to nějak upravit aby to šlo, nebo lze udělat podobný kód? (Podobný msyslím hlavně tím, že lze směrovat osu X a Y kde se screen vytvoří, tzn. že si vyfotím třeba jen hodiny vpravo dole na liště). Díky moc za odpovědi!

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

No, neviem, že kde by mohla byť chyba, kód mi pripadá v poriadku. Možno v tom, že ak zavoláte screenshot.Save tisíckrát, ale graph.CopyFromScreen len raz, tak Vám uloží tisíckrát jedno a to isté.

Len dúfam, že potom objekty graph a screenshot po sebe ničíte pomocou metódy Dispose() . Asi najlepšie je použiť na ne kód Using...End Using, tak isto, ako na všetky objekty, ktoré majú metódu Dispose(), resp. ktoré dedia z rozhrania IDisposable .

Ak pridáte toto do akejkoľvek triedy, po zavolaní CopyScreen by Vám malo urobiť screenshot, počítadlom je tu premenná count, tá musí byť mimo metódy CopyScreen.

1
2
3
4
5
6
7
8
9
10
11
12
13
Dim count As Integer
Public Sub CopyScreen()
    Dim bounds = Screen.PrimaryScreen.Bounds
    Dim width = bounds.Width
    Dim height = bounds.Height
    Using screenshot = New System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat32bppArgb)
        Using graph = System.Drawing.Graphics.FromImage(screenshot)
            graph.CopyFromScreen(0, 0, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
        End Using
        screenshot.Save("C:/test_" & count & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
    End Using
    count += 1
End Sub
nahlásit spamnahlásit spam 0 odpovědětodpovědět

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback