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.NET Discussion :

"Merger" deux images avec une couleur de transparence


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut "Merger" deux images avec une couleur de transparence
    Bonjour,

    Je cherche à faire un montage de deux images en utilisant une couleur de transparence.
    Exemple :

    J'ai une image (photo) d'un coté et de l'autre un calque avec un par exemple un coeur noir sur fond rose.

    Je souhaiterais donc placer le calque sur la photo en "enlevant" le noir du calque pour laisser apparaître la photo derrière.

    j'ai bien trouvé une notion de "MakeTransparent" dans le System.Drawing.Bitmap mais je tourne un peu en rond...

    Si qq c'est déjà amusé à ce genre de chose...
    Merci

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    alors il te faut un objet graphics
    qui est = à graphics.fromimage(taphoto)

    ensuite il faut faire un drawimage sur cet objet graphics en fournissant l'image à superposer
    drawimage a 30 surcharges
    il te faut utiliser celle avec imageattributes
    et donc il te faut instancier avant le drawimage un objet imageattributes qui doit avoir une propriété colorkey enfin un truc pour dire qu'une couleur sera couleur de transparence


    et normalement l'objet taphoto se retrouve avec le truc peint dessus et tu peux le resauvegarder

    il y d'autres méthode aussi, avec justement un objet bitmap, m'enfin essaye deja ca je pense

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    OK je vais tester cela.
    merci

    Par contre, à propos de l'objet Graphics, je vais avoir besoin d'écrire une fonction qui me calculera la taille d'une chaine. j'ai donc trouvé ça dans MSDN :

    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
    Public Sub MeasureStringSizeF(ByVal e As PaintEventArgs)
     
        ' Set up string.
        Dim measureString As String = "Measure String"
        Dim stringFont As New Font("Arial", 16)
     
        ' Set maximum layout size.
        Dim layoutSize As New SizeF(200.0F, 50.0F)
     
        ' Measure string.
        Dim stringSize As New SizeF
        stringSize = e.Graphics.MeasureString(measureString, stringFont, _
        layoutSize)
     
        ' Draw rectangle representing size of string.
        e.Graphics.DrawRectangle(New Pen(Color.Red, 1), 0.0F, 0.0F, _
        stringSize.Width, stringSize.Height)
     
        ' Draw string to screen.
        e.Graphics.DrawString(measureString, stringFont, Brushes.Black, _
        New PointF(0, 0))
    End Sub
    Ceci fonctione trés bien dans le Paint d'une form, moi je vais avoir besoin de mettre ça dans une fonction... mais voila Graphics n'est pas instanciable...
    Comment faire pour en "obtenir" un sans faire dans le cracra...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    pour mesurer un texte il y a une fonction shared et indépdendante du coup dans le framework
    System.Windows.Forms.TextRenderer.MeasureText

    pour obtenir un graphics il y a plusieurs possibilité, et je t'en ai donnée une appropriée à ton cas
    dim g as graphics = graphics.fromimage(bitmap)

    sinon tu peux faire = un_control.creategraphics, et ce que tu dessines sur le graphics se dessinera sur le control

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    Ok

    L'objectif n'étant pas de dessiner mais de me renvoyer la taille, je vais jeter un oeil sur MeasureText. Si je peux me passer du Graphics c'est tant mieux.

    Dommâge que cette fonction "shared" soit dans System.Windows.Form, je me serais bien passé de cette reference dans ma DLL.

    Merci de tes conseils.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    dans ce cas là, tu peux passer par le measurestring de graphics

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim b as new bitmap(300,10)
    dim g as graphics = graphics.fromimage(b)
    g.measurestring
    enfin ca doit fonctionner ...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    Oui mais je dois créer un Bitmap dont je n'ai pas "vraiment" besoin.
    Je crois que je ne trouverais pas exactement ce que je veux, tout simplement parce que cela ne doit pas exister dans le FrameWork2.

    Mais je ne vais pas chipoter, j'arrive à ce que je voulais, avoir la taille du texte en pixel.

    thx

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Points : 159
    Points
    159
    Par défaut
    Bon je me suis basé sur ce que tu m'avais proposé.
    Ca roule ça fonctionne.
    Pour ceux que ça interressent voici le bout de code.

    J'ai simplement cherché à faire qq qui fonctionne, par c'est bien sur optimisable pour ne pas avoir les tailles d'images en dur, ainsi que la couleur de détourage (30, 255, 60).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Using Photo As New Bitmap("C:\DSCN2843.bmp")
                Using graph As Graphics = Graphics.FromImage(Photo)
                    Dim Atr As New Imaging.ImageAttributes
     
                    Atr.SetColorKey(Color.FromArgb(30, 255, 60), Color.FromArgb(30, 255, 60))
                    graph.DrawImage(New Bitmap("C:\Mask.tif"), New Rectangle(0, 0, 1902, 1373), 0, 0, 1902, 1373, GraphicsUnit.Pixel, Atr)
                    graph.Flush()
                    Photo.Save("C:\finale.bmp", Imaging.ImageFormat.Bmp)
                End Using
            End Using
    Par contre qq sait à quand utiliser le "graph.Flush()" ?

    Bon maintenant je passe au Crop d'image.

    Merci du coup de main
    @+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/02/2011, 21h40
  2. (Gimp) créer un cadre avec une couleur de l'image.
    Par byloute dans le forum Imagerie
    Réponses: 0
    Dernier message: 05/04/2010, 18h34
  3. Dessiner une image avec une couleur transparente
    Par FabaCoeur dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 10/02/2008, 20h38

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