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 :

Problème d'image couleur-N&B


Sujet :

VB.NET

  1. #1
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 70

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 301
    Points : 130
    Points
    130
    Par défaut Problème d'image couleur-N&B
    Bonjour
    J'affiche une image couleur en cliquant les vignettes d'un form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            img3 = Me.BackgroundImage
            Me.AutoSize = True
            Me.ResizeRedraw = True
            Me.BackgroundImageLayout = ImageLayout.None
        End Sub
    a l'aide d'un menu contextuel je mets cette image en N&B

    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
     Public Function GrayScale(ByVal Img As System.Drawing.Image) As System.Drawing.Image
            Dim GrayAttributes As System.Drawing.Imaging.ImageAttributes
            Dim GrayMatrix As New System.Drawing.Imaging.ColorMatrix
            GrayMatrix.Matrix00 = 1 / 3.0F
            GrayMatrix.Matrix01 = 1 / 3.0F
            GrayMatrix.Matrix02 = 1 / 3.0F
            GrayMatrix.Matrix10 = 1 / 3.0F
            GrayMatrix.Matrix11 = 1 / 3.0F
            GrayMatrix.Matrix12 = 1 / 3.0F
            GrayMatrix.Matrix20 = 1 / 3.0F
            GrayMatrix.Matrix21 = 1 / 3.0F
            GrayMatrix.Matrix22 = 1 / 3.0F
            GrayAttributes = New System.Drawing.Imaging.ImageAttributes()
            GrayAttributes.SetColorMatrix(GrayMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Default)
            Dim FinalImg As New System.Drawing.Bitmap(Img.Width, Img.Height)
            Dim Graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(FinalImg)
            Graphics.DrawImage(Img, New Rectangle(0, 0, FinalImg.Width, FinalImg.Height), 0, 0, FinalImg.Width, FinalImg.Height, System.Drawing.GraphicsUnit.Pixel, GrayAttributes)
            Return FinalImg
        End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub NoirEtBlancToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NoirEtBlancToolStripMenuItem.Click
            Dim img2 As Image
            img2 = Me.BackgroundImage
            Me.BackgroundImage = GrayScale(img2)
            Me.Refresh()
            img2.Dispose()
        End Sub
    Ensuite je voudrai revenir à l'image en couleur avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CouleurToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CouleurToolStripMenuItem.Click
            Me.BackgroundImage = Nothing
            Me.AutoSize = True
            Me.ResizeRedraw = True
            Me.BackgroundImageLayout = ImageLayout.None
            Me.BackgroundImage = img3
            Me.Refresh()
        End Sub
    Mais c'est là qu'est le problème, l'image ne s'affiche pas et j'ai à la place une grande croix rouge

    Pouvez-vous m'aider
    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    grande croix rouge = image qui a été disposée (mémoire libérée donc plus utilisable)

    img3 = Me.BackgroundImage

    ici tu mets l'image de fond dans la variable img3

    img2 = Me.BackgroundImage

    là idem mais dans la variable img2

    img2 et img3 pointent donc vers le même espace mémoire

    img2.Dispose

    là tu détruit img2 mais img3 pointait vers la même variable


    il te faudrait dupliquer Me.BackgroundImage pour le mettre dans img2 (à tout hasard regarde s'il y a .Clone)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Inscrit en
    Mai 2004
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 70

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 301
    Points : 130
    Points
    130
    Par défaut
    Bonsoir
    Merci de tes conseils
    J'ai changé mon code form_load pour ajouter un clone de l'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            img3 = Me.BackgroundImage
            img4 = Me.BackgroundImage.Clone
            Me.AutoSize = True
            Me.ResizeRedraw = True
            Me.BackgroundImageLayout = ImageLayout.None
        End Sub
    et mon code de menu contextuel devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CouleurToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CouleurToolStripMenuItem.Click
            Me.AutoSize = True
            Me.ResizeRedraw = True
            Me.BackgroundImageLayout = ImageLayout.None
            Me.BackgroundImage = img4
            Me.Refresh()
            img4.Dispose()
        End Sub
    et ça fonctionne très bien
    Merci

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

Discussions similaires

  1. problème de coloration d'image couleur
    Par djilali852 dans le forum Images
    Réponses: 4
    Dernier message: 18/06/2012, 20h29
  2. [javascript] problème insertion image
    Par Pwill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2005, 16h12
  3. diffirencier entre les images couleurs et les noir et blanc
    Par passion_info dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/05/2005, 14h15
  4. problème dessiner image dans fenêtre
    Par raoulman dans le forum MFC
    Réponses: 5
    Dernier message: 13/12/2004, 15h44
  5. Problème d'image avec DirectX9 et c# VS.net...
    Par lilly_lilly dans le forum DirectX
    Réponses: 1
    Dernier message: 02/03/2004, 14h02

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