Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Salvare immagine contenuta in una Picturebox
Forum - Visual Basic 6 - Salvare immagine contenuta in una Picturebox

Avatar
fineagles1 (Normal User)
Newbie


Messaggi: 5
Iscritto: 25/09/2020

Segnala al moderatore
Postato alle 19:47
Venerdì, 25/09/2020
Codice usato vb6
Salve a tutti , ho trovato questa discussione nel forum:

http://www.pierotofy.it/pages/extras/forum/viewtopic.php?f ...

L'utente GRG a quanto ho capito ha risolto.
Io seguendo le istruzioni nella discussione non riesco ad avere lo stesso risultato.
Riepilogando ho 2 picturebox , picture1, picture2. La picture2 è contenuta dentro la picture.

il codice usato da me è il seguente:

Private Sub Command1_Click()
SavePicture Picture1.Image, "C:\Users\rober\Documents\Prova.bmp"
End Sub
Private Sub Form_Load()
Picture1.AutoRedraw = True
End Sub

in questo modo salvo solo il contenuto della picture1, mentre io devo salvare le immagini contenute nelle due picture, dove la picture2 deve essere sovrapposta alla picture1
Allego file immagine di come deve essere salvata.
In attesa di risposta saluti


fineagles1 ha allegato un file: Senza titolo-1.jpg (42185 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:08
Venerdì, 25/09/2020
Mi sembrava strano, prima di dirti che doveva funzionare, ho fatto una prova e funziona.
Non ho idea di dove puoi sbagliare, allegato progetto funzionante.
Le immagini vengono caricate e salvate nel percorso del progetto.


Carlo ha allegato un file: PictureInPicture.zip (444945 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 29/09/2020 alle 10:05


in programmazione tutto è permesso
PM Quote
Avatar
fineagles1 (Normal User)
Newbie


Messaggi: 5
Iscritto: 25/09/2020

Segnala al moderatore
Postato alle 12:57
Sabato, 26/09/2020
grazie per la risposta, si l'esempio che mi hai fatto è funzionante. Nel mio caso invece la posizione della picture2 nella picture1 dipendeva da .left e.top che gli venivano date dopo un calcolo. In questo modo viene salvato solo il contenuto della picture.
Ho adattato tutto al tuo esempio adesso dopo il calcolo delle coordinate la picture2 viene inserita nella picture1, diciamo che va bene , solo una cosa se mi puoi aiutare , ad ogni calcolo corrispondono delle coordinate che posizionano la picture2 , cosi come è impostato nel tuo esempio inserisce più immagini, mentre io voglio che ad ogni calcolo la prima immagine sia cancellata e inserita la nuova con a fianco i valori contenuti nella label1.

PM Quote
Avatar
fineagles1 (Normal User)
Newbie


Messaggi: 5
Iscritto: 25/09/2020

Segnala al moderatore
Postato alle 15:02
Sabato, 26/09/2020
Private Sub picture1_Click()
       Picture1.Picture = LoadPicture(App.Path & "\602-633Mhz.jpg")
       Picture1.PaintPicture Picture2.Picture, PosizioneX, PosizioneY
End Sub

risolto il posizionamento della picture2 , io ho fatto cosi :ad ogni cambiamento delle coordinate , dopo ogni calcolo richiama immagine originale e inserisce nuova picture2 . Mi manca di inserire a fianco della picture2 il valore contenuto nella label

PM Quote
Avatar
fineagles1 (Normal User)
Newbie


Messaggi: 5
Iscritto: 25/09/2020

Segnala al moderatore
Postato alle 15:49
Sabato, 26/09/2020
per aggiungere il valore della label ho fatto cosi

Private Sub picture1_Click()
       Picture1.Picture = LoadPicture(App.Path & "\602-633Mhz.jpg")
       Picture1.PaintPicture Picture2.Picture, PosizioneX, PosizioneY
       Picture1.AutoRedraw = True
       ValueLabel = Me.Label1.Caption
       Picture1.ForeColor = vbBlack
       Picture1.Font.Name = "Times New Roman"
       Picture1.Font.Size = 20
       Picture1.Font.Bold = True
       Picture1.CurrentX = PosizioneX + 500
       Picture1.CurrentY = PosizioneY
       Picture1.Print ValueLabel
    End Sub

Sembra che funzioni, una cosa che mi sono accorto è che se l'immagine che richiamo con il loadpicture è una gif che ha lo sfondo trasparente quando la inserisco nella picture1 perde la trasparenza, come si può fare per non perdere la trasparenza?

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 1:08
Domenica, 27/09/2020
Se non ricordo male bisogna gestirsi la trasparenza in proprio disegnado l'immagine 2 sulla picturebox1 pixel a pixel usando la proprietà DrawMode adeguata. (dovresti cercare un frammento di codice, o guardare Function BitBlt Lib "gdi32")

Mi dispiace.
Ho scritto due righe orribili, se non trovi nient'altro, funzionano.
Codice sorgente - presumibilmente VB.NET

  1. Dim PosizioneX As Single
  2. Dim PosizioneY As Single
  3.  
  4. Private Sub Form_load()
  5.     Picture1.AutoRedraw = True
  6.     ' se lavori con la grafica meglio i pixel
  7.     Picture1.ScaleMode = 3 'pixel
  8.     Picture1.ScaleMode = 3 'pixel
  9.     Form1.ScaleMode = 3 'pixel
  10.  
  11.     ' il colore che non copierai
  12.     Picture2.BackColor = 0
  13.  
  14.     Picture1.Picture = LoadPicture(App.Path & "\602-633Mhz.jpg")
  15.     ' quando carichi una gif, nella trasparenza, si vede il BackColor
  16.     Picture2.Picture = LoadPicture(App.Path & "\6.gif")
  17. End Sub
  18.  
  19. Private Sub picture1_Click()
  20.   'Copia pixel a pixel, escluso il colore zero (nero)
  21.   For rig = 1 To Picture2.Height
  22.     For col = 1 To Picture2.Width
  23.         If Picture2.Point(col, rig) > 0 Then
  24.             Picture1.PSet (col + PosizioneX, rig + PosizioneY), Picture2.Point(col, rig)
  25.         End If
  26.     Next
  27.   Next
  28. End Sub
  29.      
  30. Private Sub picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  31.     PosizioneX = X
  32.     PosizioneY = Y
  33.     Label1.Caption = "X: " & PosizioneX & " " & "Y: " & PosizioneY
  34. End Sub
  35.  
  36. Private Sub Command1_Click()
  37.     SavePicture Picture1.Image, App.Path & "\combinate.bmp"
  38. End Sub


la gif che ho usato è allegata.

Ti informo che in VB .Net, la PictureBox, ha due livelli, puoi caricare nel BackGround l'immagine di fondo e in Image, una PNG a 16 milioni di colori compreso canale alpha, per una trasparenza con antialias perfetta.

Visto che in VB6, stai imparando, tanto vale imparare in VB .Net.


Carlo ha allegato un file: 6.zip (1571 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 27/09/2020 alle 13:49


in programmazione tutto è permesso
PM Quote
Avatar
fineagles1 (Normal User)
Newbie


Messaggi: 5
Iscritto: 25/09/2020

Segnala al moderatore
Postato alle 13:42
Domenica, 27/09/2020
Grazie carlo per la tua risposta, mi sarà utile per le volte che dovrò usare la trasparenza ora la provo. nel frattempo ho trovato una soluzione più semplice, sto creando un programma che si chiama myPersonalTrainer ed una delle tante cose che fà misura il somatotipo , quindi quello che mi serviva è calcolate le coordinate nell'immagine del grafico contenute nella picturebox, mi doveva apparire un punto alle giuste coordinate con le coordinate scritte ed ho risolto così:


Codice sorgente - presumibilmente Visual Basic 6

  1. Picture3.Picture = LoadPicture(App.Path & "\Misure\img\MascheraSomatocarta1.gif")
  2. x = Me.Label2(3).Caption
  3. y = Me.Label2(4).Caption
  4. ValoreY = 5400 - (y * 320)
  5. ValoreX = 11130 + (x * 555)
  6. Picture3.AutoRedraw = True
  7. ValueLabel = x & " ; " & y
  8. Picture3.ForeColor = vbBlack
  9. Picture3.Font.Name = "Times New Roman"
  10. Picture3.Font.Size = 14
  11. Picture3.Font.Bold = True
  12. Picture3.CurrentX = ValoreX + 300
  13. Picture3.CurrentY = ValoreY - 150
  14. Picture3.Print ValueLabel
  15. cx = ValoreX
  16. cy = ValoreY
  17. raggio = 100
  18. Picture3.FillStyle = 0
  19. Picture3.FillColor = vbBlue
  20. Picture3.Circle (cx, cy), raggio
  21. 'Picture3.PaintPicture Picture4.Picture, ValoreX, ValoreY ' alternativa inserire nella picture3 la picture4
  22. SavePicture Picture3.Image, App.Path & "\Misure\combinate.bmp"


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:57
Domenica, 27/09/2020
Bene.
ti invio un progetto aggiornato, se qualche spunto ti resta utile, vedi.:asd:


Carlo ha allegato un file: PictureInPicture.zip (389948 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote