Oppure

Loading
25/09/20 17:47
fineagles1
Codice usato vb6
Salve a tutti , ho trovato questa discussione nel forum:

pierotofy.it/pages/extras/forum/…

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
25/09/20 21:08
Carlo
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.
Ultima modifica effettuata da Carlo 29/09/20 8:05
in programmazione tutto è permesso
26/09/20 10:57
fineagles1
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.
26/09/20 13:02
fineagles1
Private Sub picture1_Click()
Picture1.Picture = LoadPicture(App.Path & "2-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
26/09/20 13:49
fineagles1
per aggiungere il valore della label ho fatto cosi

Private Sub picture1_Click()
Picture1.Picture = LoadPicture(App.Path & "2-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?
26/09/20 23:08
Carlo
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.

Dim PosizioneX As Single
Dim PosizioneY As Single

Private Sub Form_load()
    Picture1.AutoRedraw = True
    ' se lavori con la grafica meglio i pixel
    Picture1.ScaleMode = 3 'pixel
    Picture1.ScaleMode = 3 'pixel
    Form1.ScaleMode = 3 'pixel

    ' il colore che non copierai
    Picture2.BackColor = 0

    Picture1.Picture = LoadPicture(App.Path & "2-633Mhz.jpg")
    ' quando carichi una gif, nella trasparenza, si vede il BackColor
    Picture2.Picture = LoadPicture(App.Path & ".gif")
End Sub

Private Sub picture1_Click()
  'Copia pixel a pixel, escluso il colore zero (nero)
  For rig = 1 To Picture2.Height
    For col = 1 To Picture2.Width
        If Picture2.Point(col, rig) > 0 Then
            Picture1.PSet (col + PosizioneX, rig + PosizioneY), Picture2.Point(col, rig)
        End If
    Next
  Next
End Sub
     
Private Sub picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    PosizioneX = X
    PosizioneY = Y
    Label1.Caption = "X: " & PosizioneX & " " & "Y: " & PosizioneY
End Sub

Private Sub Command1_Click()
    SavePicture Picture1.Image, App.Path & "\combinate.bmp"
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.
Ultima modifica effettuata da Carlo 27/09/20 11:49
in programmazione tutto è permesso
27/09/20 11:42
fineagles1
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ì:


Picture3.Picture = LoadPicture(App.Path & "\Misure\img\MascheraSomatocarta1.gif")
x = Me.Label2(3).Caption
y = Me.Label2(4).Caption
ValoreY = 5400 - (y * 320)
ValoreX = 11130 + (x * 555)
Picture3.AutoRedraw = True
ValueLabel = x & " ; " & y
Picture3.ForeColor = vbBlack
Picture3.Font.Name = "Times New Roman"
Picture3.Font.Size = 14
Picture3.Font.Bold = True
Picture3.CurrentX = ValoreX + 300
Picture3.CurrentY = ValoreY - 150
Picture3.Print ValueLabel
cx = ValoreX
cy = ValoreY
raggio = 100
Picture3.FillStyle = 0
Picture3.FillColor = vbBlue
Picture3.Circle (cx, cy), raggio
'Picture3.PaintPicture Picture4.Picture, ValoreX, ValoreY ' alternativa inserire nella picture3 la picture4
SavePicture Picture3.Image, App.Path & "\Misure\combinate.bmp"
27/09/20 12:57
Carlo
Bene.
ti invio un progetto aggiornato, se qualche spunto ti resta utile, vedi.:asd:
in programmazione tutto è permesso