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

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.

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
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

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