Sauvegarder une combinaison de plusieurs picture box [Résolu]

Signaler
Messages postés
1
Date d'inscription
mardi 16 juin 2015
Statut
Membre
Dernière intervention
16 juin 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
voila jai un picturebox (picterrain)avec une image que je peux changer a ma guise et aussi j'ai un autre picturebox en tableau qui s'appelle image2(i) cette 2eme picturebox.
je la drag and drop sur ma 1ere picturebox le nombre de fois que je veux ,et j'aimerais sauvegarder le tout
merci
' Si nouvelle image2
iimage2 = iimage2 + 1 'Numéro de contrôle

Load image2(iimage2) 'Créé une nouvelle image2

i = iimage2
With image2(i)
Set .Container = picterrain
.Move X - xdep, Y - ydep

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Si c'est le résultat, que tu veux sauvegarder (et non les deux images et leurs positions), il te faut écraser les pixels "recouverts" de la plus grande des deux par ceux de la plus petite, puis sauvegarder la plus grande.

A bûcher dans ton aide VB6, donc :
- propriété AutoRedraw
- méthode Point (pour lire un pixel d'une picturebox)
- méthode PSet ( pour dessiner un pixel dans une picturebox)
- instruction SavePicture
Il te faudra également probablement t'intéresser à la propriété ScaleMode ainsi qu'aux méthodes ScaleX et ScaleY (en fonction de l'échelle de ton Form et de celle de chacune de tes pictureboxes.
Tout le reste ne sera ensuite que de l'arithmétique et utilisation de deux boucles imbriquées For ... to ... Next pour parcourir les pixels de tes deux pictureboxes verticalement et horizontalement.

Voilà : tu as de quoi bûcher et t'entraîner. Fais-le pas à pas, en t'imposant quelques petits exercices simples d'abord..
Reviens, en montrant le code tenté, si tu rencontres une difficulté précise et parfaitement isolée dans le cours de l'application de ce que tu auras lu dans les rubriques signalées de ton aide VB6.

EDIT : tu peux également utiliser la méthode PaintPicture (elle t'évitera les boucles et le traitement pixel par pixel, mais te paraîtra peut-être un peu complexe, si tu débutes).

EDIT 2 : ton message n'est par ailleurs pas suffisamment clair. On ne sait pas si les images dont il s'agit sont celles de tes pictureboxes ou s'il s'agit de contrôles image placés sur tes pictureboxes, utilisées comme conteneurs (auquel cas c'est encore plus complexe).




________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
le 1er picture box est exactement un conteneur ou je dessine des lignes aussi et des rectangle avec picture.line ,pour ca j'arrive a le sauvegarder
avec save picture . mais ce qui ne se sauve pas ces les autres picturebox que je place avec drag drop sur le conteneur ,c'est aussi un picturebox mais en tableau image2(i) , quand je clique dessus pour le placer dans le conteneur
le code est celui-ci
Load image2(iimage2) 'Créé une nouvelle image2
i = iimage2
With image2(i)
Set .Container = picterrain
.Move X - xdep, Y - ydep
une fois terminer quand je fais sauver, seulet le fond du conteneur et les lignes et rectangles dessiner se sauvegarde.
je sais pas si c'est un peu plus claire pour me donner d'autres precision.
en attendant je vais travailler sur ce que tu ma dit
merci beaucoup.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Donc une ou des picturebox(es) dans une picturebox.
Je t'ai alors déjà répondu (les différentes manières possibles).
J'attends ton code d'essai sur ces bases.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Je viens de me fendre d'un petit exemple/démo.
Fais un nouveau projet,
Mets-y, n'importe où sur un form (je les place à l'Activate) :
- 3 pictureboxes Picture1, Picture2 et Picture3
- un bouton de commande nommé allons_y
mets l'image que tu veux dans la picture2 (celle à insérer dans la picture1)
et ce code :
 Private Sub Form_Activate()
' tout ce qui est ici n'est là que pour te "construire" un petit exemple
' tu n'as, toi, pas besoin de le faire par code. Il te suffit de déterminer tout cela
' en mode création
Me.ScaleMode = vbTwips
Me.Move 0, 0, Screen.Width, Screen.Height
With Picture1
.ScaleMode = vbPixels
.Move 0, 0, Screen.Width / 2, Screen.Height / 2
.AutoRedraw = True
.AutoSize = False
End With
With Picture2
.ScaleMode = vbPixels
.Move Screen.Width / 2 + 10, 0
.AutoRedraw = True
.AutoSize = True
End With
With Picture3
.ScaleMode = vbPixels
.Move 0, Picture1.Height + 5, Picture1.Width, Picture1.Height
'AutoSize = True
End With
With allons_y
.Move Me.Width / 2 + 20, Me.Height / 2 + 100, Me.Width / 2, Me.Height / 2
.Caption = "clique ici et regarde ce qui se passe"
.FontSize = 24
End With
End Sub


Private Sub allons_y_Click()
Dim la_picture1 As StdPicture, ou As Object, oux As Long, ouy As Long
Picture1.Picture = Picture1.Image
DoEvents
Set la_picture1 = Picture1.Picture
Set ou = Picture2.Container
oux = Picture2.Left
ouy = Picture2.Top
Set Picture2.Container = Picture1
Picture2.Move 20, 10
MsgBox "on a mis la petite dans la grande et on l'y a placée en 20,10 (simulation de ce que tu fais)"
Picture2.Visible = False ' on n'a même plus besoin de continuer à la voir
For i = 1 To 4
'j'ai fait exprès d'en mettre ainsi 4 et te forcer ainsi à ne pas te contenter de copier/coller
' tu vas te trouver forcé de réfléchir, d'analyser, de comprendre, puis d'adapter
Picture1.PaintPicture Picture2.Picture, Picture2.Left * i, Picture2.Top * i, Picture2.Width, Picture2.Height, 0, 0, Picture2.Width, Picture2.Height
Next
MsgBox "Tiens ===>> je t'en ai déssinées 4, à 4 endroits différents. Ce sont maintenant des parties du dessin et non des pictureboxes"
MsgBox "te reste plus qu'à sauvegarder l'image de picture1"
SavePicture Picture1.Image, "d:\toto.bmp" ' observe : propriété image et non picture
DoEvents
'preuve
Picture3.Picture = LoadPicture("d:\toto.bmp")
MsgBox "voilà ! c'est fait" & vbCrLf & "remettons tout à sa place (pas obligatoire ... juste pour fignoler)"
Picture1.Picture = la_picture1
Set Picture2.Container = ou
Picture2.Move oux, ouy
Picture2.Visible = True
End Sub

Pour ta première immersion dans le monde graphique de VB6, j'ai choisi de t'affranchir des calculs qu'imposent généralement des échelles différentes. Te voilà donc libéré de la necessité de calculs de transpositions par ScaleX, ScaleY, etc ....
J'ai pour ce faire forcé d'emblée les échelles graphiques de Picture1 et Picture2
Comme tu le constateras, cela n'en fait toutefois pas un code immédiatement compréhensible pour un néophyte. S'il est un domaine où la maîtrise est absolument nécessaire, c'est bien le domaine graphique. Il nécessite vraiment un apprentissage pas à pas.

Pour ton info : je me suis pourtant efforcé d'aller à la méthode la plus simple, de sorte à ce qu'elle ne te rebute pas d'emblée. Je n'utilise personnellement jamais de méthode similaire en matière de graphisme. Je vais directement à l'utilisation de certaines fonctions de la librairie GDI32 de l'Api de Windows. Mais on s'éloignerait-là des connaissances d'un débutant.
Bonne étude.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Génial tu as régler mon problème
ca ma pris 1 heure max pour adapter ca a mon application
merci infiniment .
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bien.
Content pour toi.
N'oublie maintenant pas de libérer cette discussion (un clic sur le tag RESOLU au niveau de ton tout premier message).
Attention : il te faut pour cela te "logger" réellement en tant de rengrams (ton inscription).