IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Sauver des shapes sur une image (vb6)


Sujet :

VB 6 et antérieur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Sauver des shapes sur une image (vb6)
    Bonsoir
    Sur un form j’ai un imagebox avec une image
    Sur le imagebox il y a une array de 3 shapes
    Les shapes sont NON visible
    Si je presse (sur un point quiconque de la image) sur le gauche du mouse alors le premier shape devient visible
    Si je presse une deuxieme fois devient visible le deuxieme
    Si je presse une troisieme fois devient visible le troisieme.
    Si je presse sur le droite du mouse tous le shape deviennent non visible don effacés.
    Tout ca avec cette code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Option Explicit
     
    Private Teller As Integer
     
    Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim i As Integer
     
        Select Case Button
          Case 1      'button gauche mouse
            If Teller < 3 Then
              Timer1.Enabled = True
              Teller = Teller + 1
              With Shape1(Teller - 1)
                .Left = Image1.Left + X - .Width \ 2     '<=====
                .Top = Image1.Top + Y - .Height \ 2      '<=====
                .Visible = True
              End With
            End If
          Case 2      'Button droite mouse
            Timer1.Enabled = False
            For i = 0 To Teller - 1
              Shape1(i).Visible = False
            Next
            Teller = 0
        End Select
     
    End Sub
     
     
    Private Sub Timer1_Timer()
    Dim i As Integer
     
      Shape1(0).Visible = Not Shape1(0).Visible
      For i = 1 To Teller - 1
        Shape1(i).Visible = Shape1(0).Visible
      Next
     
    End Sub
    Avec ca je sauve la image, mais PAS les shapes au dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SavePicture Image1.Picture, "C:\Immagine.bmp"
    Pouvez moi m’aider a modifier cette code pour sauver aussi le shapes en meme temps que l’image ? Donc sauver les shapes AVEC la image dans la position ou ils sont devenu visibles ?

    Merci

    titella

  2. #2
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    A ma conaissance ce n'est pas possible ... une shape est un objet totalement a part d'une picturebox ... que cherches tu as faire ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ce que j'ai dit.
    sauver l'image AVEC le shapes au dessus, là ou il se trouvent.
    Peut etre il faut adapter le file ou la maniere de sauvautage.
    Par exemple sauver les coordonés (x,y) des shapes a part.
    Il n'est moi pas reussi.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Si tu veux sauvegarder cette "image", il faut qu'elle existe

    Or là : tu as un contrôle image et "par dessus" d'autres contrôles (des shapes) qui ne font pas partie de ton "image"

    Seules possibilité :

    1) la "lourde" et déconseillée : faire une capture d'image de la partie de ta fenêtre ===>> sauvegarder le résultat de cette capture en pixels vers un fichier .bmp

    2) la "normale" : remplacer ton contrôle Image par une picturebox et y dessiner (méthode Line ou circle) en remplacement de tes shapes. Sauvegarder ensuite le résultat qui, lui, sera un véritable élément graphique.

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 623
    Points
    16 623
    Par défaut
    Premiere façon
    dessine sur un picturebox "PictImprime", ton image, puis avec PictImprime.Line ou Circle
    tu dessines toute les Shapes visibles, et tu sauve cette PictImprime sous le nom de ton image de départ.
    Mais la prochaine fois que tu réutiliseras cette image sauvgardée, tu auras bien le dessin de ta/tes shapes,
    mais pas de possibilité de rendre a nouveau invisible, puisque se serat des pixels de couleurs et
    non des Shapes.

    Deuxiéme facon
    Creér un.txt du nom de ton image, pour chaque shape visible tu ecris une ligne de toutes les propriétés utiles,
    quand tu réouvriras l'image tu lis le fichier .txt pour replacer et donner toutes les propriétés a la/les shapes.
    Motif de l'edit
    Salut ucfoutu, On s'est encor croisé

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci a tous
    1 - Je voudrais essayer le methode 'lourde' de ucfoutu.
    Comment faire une capture de image de la fenetre (image)?

  7. #7
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    la methode lourde est moins bien, a mon avis, que la methode en utilisant les outils de dessins ...

    Et en reflichissant a un traitement tu pourrais conserver ton fonctionnement :

    tout d'abord tu céer un objet ou une structure "type_shape" qui contiendrait les coordonnées ansi que tout les parametre dont tu as besoin pour les dessiner, ainsi qu'un boolean visbile.

    tu fais un tableau de "type_shape" et tu redessine sur l'image toutes les shape dont la propriete visible est a true ...


    c'est une proposition

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonsoir,
    Explique un peu ce qu'est
    Sur le imagebox il y a une array de 3 shapes
    A+

  9. #9
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 623
    Points
    16 623
    Par défaut
    Comment faire une capture de image de la fenetre (image)?
    Ma premiere suggestion me semblait asser simple, mais voici une autre façon
    Sur un Form, 2 PictureBox et 2 CommandButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Option Explicit
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    'pour obtenir l'image de l'écran
    Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
    'pour obtenir les coordonnées d'une fenetr ou d'un objet ayant la propriété HwnD
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    'pour obtenir le contexte de dispositif d'affichage (C.C)
    Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
    'pour dessiner l'image capturée dans un picture
    Private Declare Function BitBlt Lib "gdi32.dll" ( _
        ByVal hDestDC As Long, _
        ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
        ByVal hSrcDC As Long, _
        ByVal xSrc As Long, ByVal ySrc As Long, _
        ByVal dwRop As Long) As Long
    Const SRCCOPY As Long = &HCC0020
     
     
    Private Sub Form_Load()
    'les APIs ont besoins de données en pixels
    Me.ScaleMode = vbPixels
    Picture1.ScaleMode = vbPixels: Picture1.AutoRedraw = True
    Picture2.ScaleMode = vbPixels: Picture2.AutoRedraw = True
    Command1.Move 14, 6, 99, 21
    Command1.Caption = "Visible/no Visible"
    Command2.Move 150, 6, 99, 21
    Command2.Caption = "GO"
    Picture1.Move 6, 34
    Shape1.BorderWidth = 3: Shape1.Shape = 3 'circle
    Shape1.Move 2, 2, 40, 40
    End Sub
     
    Private Sub Command1_Click()
    'bascule
    Shape1.Visible = Not Shape1.Visible
    End Sub
    Private Sub Command2_Click()
    Dim LaSource As RECT
    'placement et dimensionnement de la picture ou serat dessiné l'image
    Picture2.Move Picture1.Left + Picture1.Width + Picture1.Left, _
                  Picture1.Top, Picture1.Width, Picture1.Height
     
    'Obtient les coordonnées de l'image devant être copier (depuis l'écran)
    GetWindowRect Picture1.hwnd, LaSource
     
    'Capture l'image de Picture1 et la dessinne dans le Picture2
    'le + 2 pour ajouter la bordure 3D du PictureBox
    'LaSource.Left étant pris depuis le bord de l'écran, non pas de la Form
    'idem pour LaSource.Top
    BitBlt Picture2.hDC, 0&, 0&, Picture1.ScaleWidth, Picture1.ScaleHeight, _
           GetDC(GetDesktopWindow()), LaSource.Left + 2, LaSource.Top + 2, SRCCOPY
    DoEvents
    Picture2.Refresh
    'Maintenant il suffit de sauvegarde avec SavePicture
    SavePicture Picture2.Image, App.Path & "\Limage.BMP"
    'Ou le mettre dans le ClipBoard (presse papier Window"
    Clipboard.Clear
    Clipboard.SetData Picture2.Image, vbCFDIB
    End Sub
    Motif de l'edit
    Ajout de la possibilité de mettre l'image final dans le presse papier Window

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Repo,se a Forestier:

    Avec la routine que j'ai posté , en pressnt sur le gauche du mouse on dessin un point (shape) sur l'image.
    A chaque pression du gauche on dessin un point sur l'image.(max 3)

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je crois que ca suffit.
    J'ai testé le code de ProgElecT et il marche.

    Je vais maintenant moi meme de resoudre le tout.
    Merci a tous !

    titella

  12. #12
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    N'oublie pas de mettre le Tag [Resolu] titella

Discussions similaires

  1. [Javascript Debutant]Comment positionner des boutons sur une Image?
    Par bylka dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2007, 13h07
  2. Emplacement des antennes sur une image PNG
    Par ferraoun dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 05/06/2007, 17h27
  3. Réponses: 8
    Dernier message: 07/08/2006, 17h40
  4. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51
  5. Une infobulle à partir des coordonnées sur une image
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo