Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET- screenshot localizzato
Forum - C# / VB.NET - VB.NET- screenshot localizzato

Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 17:07
Mercoledý, 17/03/2010
ciao a tutti.
avrei la neccessitÓ di fare uno screenshot,ma non di tutto il monitor solo di un pezzo
nel dettaglio:
ho una form con una picturebox e un bottone
la form ha la proprietÓ trasparencykey impostata su un colore
la picturebox ha la proprietÓ backcolor impostata sullo stesso colore senza nessuna immagine, quindi vedo dentro alla picturebox quello che sta dietro alla form(come nell'immagine)
a me servirebbe di fare lo screenshot solo della picturebox per catturare quello che ne viene "mostrato"


walker93 ha allegato un file: screenshot.PNG (1637046 bytes)
Clicca qui per guardare l'immagine


Il software Ŕ come il sesso, Ŕ meglio quando Ŕ libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. ╚ pi¨ facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:08
Mercoledý, 17/03/2010
C'era un metodo che permetteva di catturare porzioni di schermo, ma al momento non riesco proprio a ricordare quale sia o dove si trovi. Nel peggiore dei casi, puoi effettuare una print screen, che ti salva l'immagine nella clipboard, quindi ottenere tutta l'immagine (Clipboard.GetImage) e usare Graphics.DrawImage per trasportarne una parte in un'altra immagine vuota.
Ricorda che le coordinate della PictureBox sono relative al form. Per trasformarle in coordinate assolute relative allo schermo devi usare PictureBox.PointToScreen(New Point(0,0)) (questo restituisce le coordinate del vertice superiore sinistro della picturebox rispetto allo schermo).


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 18:39
Mercoledý, 17/03/2010
beh grazie per la risposta...
se ti viene in mente il metodo per le porzioni penso sia molto pi¨ semplice
perchŔ io adesso ho usato
Codice sorgente - presumibilmente VB.NET

  1. Dim p As New Point(0, 0)
  2. Dim im As Graphics
  3. SendKeys.Send(Chr(Keys.Snapshot))
  4. Threading.Thread.Sleep(700)
  5. PictureBox1.PointToScreen(p)
  6. im.DrawImage(Clipboard.GetImage, PictureBox1.Location.X, PictureBox1.Location.Y, PictureBox1.Width, PictureBox1.Height)


ma non funziona

Ultima modifica effettuata da walker93 il 17/03/2010 alle 23:11


Il software Ŕ come il sesso, Ŕ meglio quando Ŕ libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. ╚ pi¨ facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:16
Giovedý, 18/03/2010
im non Ŕ inizializzata, quindi non stai usando nessun oggetto Graphics.
im non Ŕ associata ad un'immagine, quindi anche se contenesse un oggetto valido, non produrrebbe alcun output.
PointToScreen Ŕ una FUNZIONE, come si legge chiaramento sia dalla documentazione sia dall'intellisense. Tu la stai usando come una procedura. Tutto quello che una funzione fa Ŕ produrre un valore, e tu ignori palesemente quel valore, quindi Ŕ inutile.

Codice sorgente - presumibilmente VB.NET

  1. Dim B As New Bitmap(PictureBox1.Width, PictureBox1.Height)
  2. Dim im As Graphics = Graphics.FromImage(B)
  3. SendKeys.Send(Chr(Keys.Snapshot))
  4. Threading.Thread.Sleep(700)
  5. im.DrawImage(Clipboard.GetImage(), New Rectangle(PictureBox1.PointToScreen(New Point(0, 0)), PictureBox1.Size))
  6. im.Flush()
  7. ' B dovrebbe contenere parte dello schermo



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 20:41
Giovedý, 18/03/2010
il tuo codice mi da errore:

  System.ArgumentNullException non Ŕ stata gestita
  Message="Il valore non pu˛ essere null. Nome parametro: image"

ho provato con questo:
Codice sorgente - presumibilmente VB.NET

  1. SendKeys.Send("%{PRTSC}")
  2.         Application.DoEvents()
  3.         Dim image As Image = Clipboard.GetImage
  4.         Dim g As Graphics = Graphics.FromImage(image)
  5.         PictureBox1.Image = image



questo fa bene l'immagine senza errori ma di tutta la form e non della picturebox

come adattarlo alla sola picturebox?


Il software Ŕ come il sesso, Ŕ meglio quando Ŕ libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. ╚ pi¨ facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 17:00
Venerdý, 19/03/2010
con questo codice ottengo buoni risultati solo che non appena ridimensiono la form
(e anche la picture box con la prop. anchor) si svuota la picturebox e non riesco a salvarel'immagine
Codice sorgente - presumibilmente VB.NET

  1. Dim rect As Rectangle
  2.     Dim image As Image
  3.     Dim g As Graphics        
  4.         rect = New Rectangle(-5, -20, PictureBox1.Width + 10, PictureBox1.Height + 60)
  5.         SendKeys.Send("%{PRTSC}")
  6.         Application.DoEvents()
  7.         image = Clipboard.GetImage
  8.         g = Graphics.FromImage(image)
  9.         g = PictureBox1.CreateGraphics
  10.         g.DrawImage(image, rect)



Il software Ŕ come il sesso, Ŕ meglio quando Ŕ libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. ╚ pi¨ facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:54
Sabato, 20/03/2010
Il metodo era Graphics.CopyFromScreen


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 19:51
Lunedý, 22/03/2010
oooook
ho usato:

Codice sorgente - presumibilmente Plain Text

  1. g = PictureBox1.CreateGraphics
  2.           g.CopyFromScreen(PictureBox1.PointToScreen(New Point(0, 0)).X, _
  3.             PictureBox1.PointToScreen(New Point(0, 0)).Y, _
  4.             PictureBox1.PointToScreen(New Point(0, 0)).X + PictureBox1.Width, _
  5.             PictureBox1.PointToScreen(New Point(0, 0)).Y + PictureBox1.Height, _
  6.             PictureBox1.Size)


ma come visualizzarlo nella picturebox??
copyfromscreen non restituisce un valore


Il software Ŕ come il sesso, Ŕ meglio quando Ŕ libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. ╚ pi¨ facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:12
Martedý, 23/03/2010
La seconda coppia di coordinate indica il punto in cui copiare l'immagine. Tu la stai copiando fuori dalla picturebox (ossia con il vertice superiore sinistro coincidente con il vertice inferiore destro della picturebox), e forse per questo non riesci a vederla.

Al massimo disegna l'immagine su una bitmap e poi impostala come immagine nella picturebox.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote