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

Windows Forms Discussion :

Fusion d'image dans VB 2008 Express


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Fusion d'image dans VB 2008 Express
    Bonjour à tous. Je souhaite créer une application, mais il me manque la partie du code qui me permette de fusionner deux images(intégration de texte et d'image : dans une image source).
    Je ne sait plus où chercher, je ne trouve que de rares forums où l'on en parle, mais a priori, VB 2008 n'utilise pas le même code que VB 6.0.
    Merci d'avance !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Dim imgbase As System.Drawing.Image
            imgbase = System.Drawing.Image.FromFile("")
     
            Dim g As System.Drawing.Graphics
            g = System.Drawing.Graphics.FromImage(imgbase)
     
            g.DrawString()

    g permet plein de choses graphique qui dans le cas montré ci dessus seront appliquées sur l'objet imgbase
    g.drawimage permet de déssiner une 2 image sur la 1ère (transparence de image2 gérée)
    imgbase.save pour sauvegarder le résultat
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Il me reste du travail....
    Merci sperot51,
    Ton message me donne le point de départ.
    Je te remercie !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut recherche toujours en cours...
    Je viens de manger de l'aide à ne plus en pouvoir toute la journée. Très intéressant car j'y vois plus clair dans certains domaines, mais rien de très explicite pour mes besoins actuels...

    Dois-je utiliser les mêmes codes pour modifier les Formulaires (et contrôles), et les images (stockées comme des variables) ???

    Je vais me permettre une question, mais évidemment, je comprendrais si tu refusais :
    _ Pourrais-tu, Sperot51, me copier le code rapide mais complet pour fusionner une image chargée dans pictureBox1 (taille 100 x 100) et une image chargée dans pictureBox2 (taille 10 x 10 situé dans le bord supérieur gauche (0 x 0)), en l'affichant dans pictureBox3 ?

    Ca m'enlèverait une poutre du pied et tu serais placé tout en haut de ma pyramide d'honneur !

    S'il existe un tutoriel concernant la fusion de deux images dans VB 2008, tel que ceux que l'on trouve sur VB 6.0, je suis preneur.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ca ressemble à ce que je t'ai mis, un picturebox a une propriété image de type drawing.image
    et si tu utilises backgroundimage ca marche aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Dim imgfinale As New System.Drawing.Bitmap(picturebox1.width,pitcurebox1.height)
     
            Dim g As System.Drawing.Graphics
            g = System.Drawing.Graphics.FromImage(imgfinale )
     
            g.drawimage(picturebox1.image,0,0) 
            g.drawimage(picturebox2.image,0,0)
     
            picturebox3.image = imgbase
    ca doit marcher ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut merci, opération réussie
    Je m'attendais à beaucoup plus complexe. Je peaufine le logiciel, et les images, mais ça marche !
    Merci et à très bientôt pour de nouvelles questions ...
    et encore merci

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Question complémentaire
    sperot51 !

    En fait, je crée pour mon bouleau un logiciel me permettant d'imprimer des étiquettes de prix.

    Jusqu'à aujourd'hui, j'ai appris à gérer les bases de données, à fusionner des images, à rendre plus agréable et intuitif mon logiciel, à enregistrer un journal pour pour me faciliter la tache dans l'éradication total des bugs.

    Je parcours les tutoriels, les bouquins achetés à la Fnac. Je m'instruis, je tente de trouver seul les infos. J'ajoute plein de petites fonctionnalités au logiciel, seulement je bute toujours sur certaines actions primordiales, comme la fusion de texte dans les étiquettes.

    Grâce à ton aide, sperot51, l'étiquette prend la couleur de chaque opérateur et affiche le logo du (ou des) opérateur(s) compatible(s), affiche le logo de la marque, il ne me reste plus qu'à fusionner les caractéristiques (venues de ma base de données associée au projet) dans l'étiquette à imprimer.

    Ma seule question est la suivante : "de quelle manière intègres-tu du texte dans une image ?"

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    à peu près de la meme manière que pour mettre une image
    sur un objet graphics
    .DrawString
    tu peux spécifier font et autre

    l'objet graphics est l'objet qui sert à tout ce qui est graphisme en .NET
    que ca soit à l'écran (boutons et autres), sur une un objet printer (imprimante) ou sur une image c'est ca qui est utilisé
    il y a drawimage, drawstring mais aussi drawcircle, drawline, drawrectangle et bien d'autres
    (sans parler de toutes les classes pour faire du graphisme genre changement de couleur, dégradés, hachures, "textures", rotations, transformation ...)


    sinon tu aura peut etre besoin de connaitre la taille d'une chaine de caractère, si tu veux faire des centrages ou autre

    => system.windows.forms.textrenderer.measurestring ou measuretext je sais plus
    as system.drawing.size
    il y a des flags pour dire par exemple de forcer une taille en largeur et que tu vas à la ligne automatiquement (sans couper les mots) et donc de connaitre la hauteur que ca donne (vu que la largeur est fixe)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut je craque
    Salut Sperot51 ,
    En fait, je galère plus que prevu, je ne maîtrise pas la taille des images que je fusionne ?!? (et je galère comme un dingue avec illustrator cs2 que je ne connaissais pas).
    J'ai créé une etiquette de base sur illustrator de 285 x 415 pixels et je positionne le logo de la marque à x = 55 et y =55 : il se positionne à x = 45 et y = 45(ce qui, tu l'imagines, me pose de sérieux problèmes techniques).
    En plus, mon image finale ne s'ajuste pas dans mon picturebox1 (pourtant, il le fait sans la fusion, lorsque je le charge simplement)
    si jamais tu as une idée de ce que j'oublie, je te laisse le code de VB :

    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
    Public Class Aperot_51
     
        Private Sub Bt_Fusion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bt_Fusion.Click
     
            Dim Im_Etiq As System.Drawing.Image = System.Drawing.Image.FromFile("C:\...\Hors Pack.png")
            Dim Im_Nok As System.Drawing.Image = System.Drawing.Image.FromFile("C:\...\nokia.png")
            Dim Im_Finale As New System.Drawing.Bitmap(285, 415)
            Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(Im_Finale)
     
            g.DrawImage(Im_Etiq, 0, 0)
            g.DrawImage(Im_Nok, 55, 55)
     
            PictureBox1.Image = Im_Finale
            PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage '= 3
     
        End Sub
    End Class
    dans les propriétés de mon PictureBox1, Size = 285;415
    Parfois, c'est rigolo VB.net, mais parfois, c'est à s'arracher les cheveux par grosses touffes !

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    au lieu de mettre l'image dans picturebox.image, mets la dans backgroundimage
    et backgroundimagelayout à stretch

    sinon je comprends pas le reste du problème, enfin ca me parait étrange
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    salut,
    j'ai fait le test mais ça ne change pas, je pense que ça viens de l'image.

    ...Lorsque je fait une image sur illustrator au format 285 x 415, et que je l'attribut à ma PictureBox de même taille, il faut toujours que redimensionne l'image avec stretch.

    ... lorsque j'ouvre mon etiquette sur paint, elle mesure 1190 x 1730
    alors que sur illustrator elle fait 285 x 415...
    ...1 pixel sur illustrator = 1 pixel dans VB et paint ? question de définition d'image, peut-être ?

  12. #12
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    1 pixel c'est 1 pixel

    sinon quand tu fais g.DrawImage(Im_Etiq, 0, 0) si ton image ne fait pas la taille de ton picturebox, tu vas effectivement dessiner ensuite à 55 55
    mais en redimensionnant le tout, celle que tu mets à 55 55 va se retrouver plus près de 0 0


    donc soit il faut que tu dimensionnes ton image finale à la taille de ton im_etiq (im_etiq.width et heigth au lieu de prendre celle de ton picturebox)


    ou alors mieux, tu demandes à dessiner Im_Etiq à 0 0 mais en précisant que tu veux qu'il soit redimensioné tout de suite
    drawimage a 30 surcharges, dont une qui permet de spécifier la nouvelle taille
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Bonsoir Sperot !

    Ok, j'ai compris mon erreur sur illustrator qui redimensionne l'image (Menu Objet, pixelisation)
    Du coup, lorsque je charge l'étiquette dans BackgroundImage du PictureBox, je n'ai pas besoin de le redimensionner
    et je viens d'arriver à contenir la taille lors de la fusion

    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
    Public Class Form1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Im_Etiq As New System.Drawing.Bitmap(285, 415)
            Im_Etiq = System.Drawing.Image.FromFile("C:\Users\Doud'\Documents\Visual Studio 2008\Projects\PES mp 2.0\Etiquettes Opérateur\hors pack2.png")
            Dim Im_Nok As New System.Drawing.Bitmap(99, 30)
            Im_Nok = System.Drawing.Image.FromFile("C:\Users\Doud'\Documents\Visual Studio 2008\Projects\PES mp 2.0\Etiquettes Opérateur\nokia.png")
            Dim Im_Finale As New System.Drawing.Bitmap(285, 415)
            Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(Im_Finale)
     
            g.DrawImage(Im_Etiq, 0, 0, 285, 415)
            g.DrawImage(Im_Nok, 15, 15, 99, 30)
     
            PictureBox1.BackgroundImage = Im_Finale 'Im_Etiq '
        End Sub
    End Class
    il faut bien que je mensionne la taille de l'image lors de la fusion.
    Je te remercie beaucoup et je repars travailler pour m'approprier tout ça...
    Et à bientôt soit pour un autre blocage, soit pour t'annoncer que tout est ok est fini. merci encore pour ton aide, et pour ta réactivité !

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut ça avance :!:
    Sperot,
    La fusion, pour l'image comme pour le texte, fonctionne à merveille même pour le texte provenant d'une base de donnée.
    Me voilà reparti pour de nouvelles aventures.
    Je ne trouve aucun article concernant l'identification du dossier où se trouvent les images neccessaire à la fusion. je m'explique :

    Lorsque je veux lancer mon logiciel sur mon ordi au bureau, j'ai besoin sur ma clé USB :
    _ de mon logiciel "PESmp.exe"
    _ de ma base de donnée Acces "BdmTest.accdb"
    _ et de mon dossier d'image "Etiquettes Opérateur"

    L'accès à la base de donnée se fait sans aucun problème depuis la clé, mais je dois mettre le dossier "etiquettes Opérateur" dans le dossier AllUser pour etre sur que ça fonctionne.(La lettre de la clef (G:/..., H:/..., I:/..., ou autre) change d'un ordi à l'autre). Par contre, ça ne marche que sur XP, et pas sur Vista...

    Connaîtrais-tu une solution qui me permette de progammer et de tester chez moi sur vista et d'avoir un résultat équivalent sur XP et de même sur tout les PC de mon magasin

  15. #15
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pas compris
    mais il est possible de savoir ou est l'exe au moment où il s'execute
    et donc de trouver où sont les fichiers annexes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut oui, je veux indiquer à programme.exe où se trouvent tous les fichiers...
    Quand je lance mon program.exe depuis la cle USB, il trouve seul l'adresse de la base de donnée sur la cle, mais pas celle du dossier ou se trouvent les images necessaires à la fusion.

    Je ne sais pas comment lui donner l'adresse de la clé, car son nom change sur chaque ordi en fonction de la configuration de l'ordi.
    L'identification par la lettre (disque dur = C:/ ; lecteur cd = D:/ ; Disque amovible = f:/) n'est pas la même sur tout les ordinateur.

    Je peux lui indiquer une adresse précise tel que dans les documents partager, mais en fonction du système (xp ou vista), elle change

    pour Vista
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("C:\Users\Public\Documents\Etiquettes Opérateur\Etiquettes Opérateur\Orange.png")
    pour Xp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("C:\Documents and Settings\All Users\documents\Etiquettes Opérateur\Orange.png")
    Or l'application sera utilisée sur les deux OS.

    Donc voilà, si tu vois une solution...

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Et pour tout autre chose ...
    Je souhaite donner un aspect transparent à mon cadre du genre Vista (ou bien comme dans certaines applications comme celle que je t'envoi en piece jointe), mais en conservant l'opacité au centre de mon formulaire.


    Je lis partout :
    _ comment rendre transparent toute la feuille avec Opacity
    _ Comment la rendre invisible à l'aide de TransparencyKey

    J'ai fait plein de tests avec illustrator, pour utiliser la transparence, qui marche dans la fusion, mais pas là.

    Voili-voilou

    Au fait, comment as-tu appris Visual Basic, Formation ou Auto-didacte ?
    Images attachées Images attachées  

  18. #18
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par candre100 Voir le message

    Je ne sais pas comment lui donner l'adresse de la clé, car son nom change sur chaque ordi en fonction de la configuration de l'ordi.
    L'identification par la lettre (disque dur = C:/ ; lecteur cd = D:/ ; Disque amovible = f:/) n'est pas la même sur tout les ordinateur.

    Je peux lui indiquer une adresse précise tel que dans les documents partager, mais en fonction du système (xp ou vista), elle change

    pour Vista
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("C:\Users\Public\Documents\Etiquettes Opérateur\Etiquettes Opérateur\Orange.png")
    pour Xp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("C:\Documents and Settings\All Users\documents\Etiquettes Opérateur\Orange.png")
    Or l'application sera utilisée sur les deux OS.

    Donc voilà, si tu vois une solution...

    comme je disais, il y a moyen de savoir d'ou tu es executé

    System.Windows.Forms.Application.ExecutablePath surement



    il y a aussi moyen de connaitre le dossier utilisateur windows en cours, pour ca cherche dans la variable application
    ou my.Application ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    Pour la transparence, l'excellent tuto suivant :
    http://badger.developpez.com/tutorie...t-glass-vista/
    Sur Developpez.com bien entendu
    c'est ecrit en C, suffit de traduire ...

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Que du bonheur
    encore

    "System.Windows.Forms.Application.ExecutablePath" me donne l'adresse fichier compris,
    mais en cherchant, system.Windows.Forms.Application.StartupPath me permet de l'obtenir sans. J'ai fait le test, et ça marche à merveille. La classe !


    , aussi à toi totanne, je n'ai pas encore expérimenté, mais le rendu est terrible. Dommage qu'il ne fonctionne qu'avec Vista, et que le tutoriel soit en C#.
    Mais s'il est possible de le traduire, alors je tenterai ma chance...

    J'ai l'impression de me répéter, mais merci, merci, merci pour l'aide et la disponibilité. Mon projet avance régulièrement, malgrès mon manque de connaissance.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/11/2012, 11h55
  2. Réponses: 5
    Dernier message: 13/02/2009, 18h28
  3. changer l'auto completion dans VC++ 2008 Express
    Par VSEB33 dans le forum Visual C++
    Réponses: 3
    Dernier message: 20/01/2009, 09h14
  4. Template Projet SL dans VS 2008 express
    Par zooffy dans le forum Silverlight
    Réponses: 4
    Dernier message: 12/09/2008, 13h08
  5. Réponses: 12
    Dernier message: 07/04/2008, 10h36

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