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 :

Convertir une image couleur format PNG en une image nuance de gris format PNG


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Convertir une image couleur format PNG en une image nuance de gris format PNG
    Bonjour,

    Je débute dans la programmation en VB.net et j'ai quelques notions en C++

    J'ai pour objectif de convertir une image PNG couleur en image à nuance de gris en PNG aussi.

    J'ai d'ores et déjà parcouru une grande majorité des sites sur ce sujet mais malgré tout j'ai du mal à conclure mon programme.

    J'utilise comme logiciel Microsoft Visual Basic 2010 Express avec .NET Framework 4.0

    J'ai pour contrainte de devoir utiliser un seul et unique bouton pour réaliser ce programme.

    Voici tout d'abord mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub ConvertToGray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConvertToGray.Click
     
            Dim NewImage As Bitmap = Bitmap.FromFile("..\sans-titre.png") 
            Dim Graph As Graphics = Graphics.FromHwnd(Me.PictureBox1.Handle)
     
            Graph.DrawImage(NewImage, Me.PictureBox1.DisplayRectangle)
     
            Conversion(NewImage) 'Programme qui devrait appliquer la transformation de couleur
            ByteToImage() 'Programme pas encore développé
     
        End Sub
    Ici, j'ai souhaité avant tout montrer l'image télécharger dès appui sur le bouton et je me sers de cet appui pour lancer mes programmes de conversion.

    Voilà maintenant la suite:

    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
        Public Function Conversion(ByVal Sender As System.Drawing.Bitmap) As Double
     
            'Dim pixelColor(m_nSizeX, m_nSizeY) As Double
            'Dim ConvertToGrayA(m_nSizeX, m_nSizeY) As Double   'J'ai essayé plusieurs solutions voilà le pourquoi des guillemets
            'Dim red, green, blue As Int32
            Dim x, y As Int32
     
            Dim pixelColor As Color
            Dim pixcolorgray As Int32
     
            For y = 0 To m_nSizeY - 1 Step 1
                For x = 0 To m_nSizeX - 1 Step 1
     
                    'pixelColor = Bitmap.GetPixel(x, y)  'Ne marche pas sur ma version
                    pixcolorgray = (Val(pixelColor.A) / 255) * (0.114 * Val(pixelColor.B) + 0.587 * Val(pixelColor.G) + 0.299 * Val(pixelColor.R))
     
                    masque(y * m_nSizeX + x) = 255 - pixcolorgray 'masque est définit comme Byte
                Next
            Next
     
            Dim boucle As Double
            Dim SW As StreamWriter = File.CreateText("..\fichier_image.txt")
     
            For boucle = 0 To m_nSizeX * m_nSizeY '0 To 1024 * 768
                SW.WriteLine(masque(boucle))
     
            Next
            SW.Close()
            Dim SR As New StreamReader("..\fichier_image.txt")
     
            'Return ConvertToGrayA(x, y)
        End Function
    En gros voilà, je sais qu'il y a plein d'incohérence mais à force d'avoir le nez plongé dedans, je ne vois plus rien du tout.

    Pour vous éclairer, voilà ce que je souhaiterais faire, en langage "parlé":

    Dès appui sur le bouton,
    On aperçois l'image en couleur format PNG,
    Inscription de la couleur de chaque pixel dans un tableau
    Réalisation de la modification (nuance de gris via formule)
    Inscription des nouveaux pixels (en gris) dans un autre tableau
    Conversion de ce tableau en image en nuance de gris format PNG

    Je suis bien conscient de la difficulté de reprendre un tel programme si mal construit mais comme je vous l'ai dit, je débute.

    Je pourrais surement vous apporter plus de précision demain notamment concernant les erreurs qui s'affichent.

    Merci d'avance pour votre aide.

  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
    quand tu as ton image, faire .save(chemin, format) (et donc mettre png gris, la syntaxe ne coule pas de source)
    et si tu veux juste l'image pour l'afficher sans l'enregistrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim b as new bitmap (imageorigine.width, imageorigine.height, gris)
    using g = graphics.fromimage(b)
      g.drawimage(imageorigine,1,1, etc...)
    end using
    ' b contient l'image en gris
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    D'accord pour la .save

    En revanche, je ne comprend pas, le fait de mettre ( , , gris) ne peut pas si simplement me réaliser mes niveaux de gris.

    Nan ? ^^

  4. #4
    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
    problème de ponctuation peut être mais je ne comprends rien ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    quand tu as ton image, faire .save(chemin, format) (et donc mettre png gris, la syntaxe ne coule pas de source)
    Ca d'accord, si je comprend bien, une fois mon image en nuance de gris créée au format PNG, je n'aurais qu'à utiliser cela pour la sauvegarder.

    En revanche pour le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim b as new bitmap (imageorigine.width, imageorigine.height, gris)
    using g = graphics.fromimage(b)
      g.drawimage(imageorigine,1,1, etc...)
    end using
    ' b contient l'image en gris
    Je ne comprend pas ce que ça fait.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Pour moi, cela sert à afficher mon image final.

    Mon problème est plus en ce qui concerne la réalisation du niveau de gris plutôt que dans l'affichage ^^.

  7. #7
    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
    Citation Envoyé par Doudou74 Voir le message
    Ca d'accord, si je comprend bien, une fois mon image en nuance de gris créée au format PNG, je n'aurais qu'à utiliser cela pour la sauvegarder.
    non en fait au moment où on sauvegarde, on peut spécifier le format d'enregistrement avec un classe de codec image
    et donc même si l'image est en couleur tu peux spécifier du niveau de gris je pense

    Citation Envoyé par Doudou74 Voir le message
    En revanche pour le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim b as new bitmap (imageorigine.width, imageorigine.height, gris)
    using g = graphics.fromimage(b)
      g.drawimage(imageorigine,1,1, etc...)
    end using
    ' b contient l'image en gris
    Je ne comprend pas ce que ça fait.
    dim b as new bitmap instancie une nouvelle image en lui donnant une taille et un format (16bppGrayScale ou un truc dans le genre dans ton cas)
    cette image est vide
    g = graphics.Fromimage permet d'avoir une objet graphics lié à l'image qu'on vient de créer
    tout ce qui est dessiné sur g l'est sur b
    g.Drawimage permet de dessiner une autre image sur b
    b étant défini en nuance de gris le framework s'occupe de modifier la couleur


    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx
    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ok merci j'essayerais cela demain.

    Je n'ai pas accès au logiciel chez moi.

    En tout cas merci et je vous tiendrai au courant de l'avancé ^^

  9. #9
    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
    visual studio express est gratuit
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Alors j'ai essayé, et voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub ConvertToGray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConvertToGray.Click
     
            Dim NewImage As Bitmap = Bitmap.FromFile("..\sans-titre.png")
            Dim Graph As Graphics = Graphics.FromHwnd(Me.PictureBox1.Handle)
            Dim Graph2 As Graphics = Graphics.FromHwnd(Me.PictureBox2.Handle)
            Graph.DrawImage(NewImage, Me.PictureBox1.DisplayRectangle)
     
            Dim NewBitmap As New Bitmap(NewImage.Width, NewImage.Height, Format16bppGrayScale)
            Using g = Graphics.FromImage(NewBitmap)
                g.drawimage(NewImage, Me.PictureBox2.DisplayRectangle)
            End Using
        End Sub
    Ceci me renvoi une erreur qui dit:
    "Format16bppGrayScale" n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.

    Ce n'est pas la première fois que cette erreur apparait, comme puis je la contourner.

    J'aimerais aussi préciser qu'il est important pour la suite de mon projet d'obtenir au moins un Byte ou un tableau contenant l'ensemble des nuances de gris de mon image.

    Merci encore pour votre aide.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Je précise que j'ai bien importé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Drawing.Imaging

  12. #12
    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
    tu effaces Format16bppGrayScale et la virgule avant, tu remets la virgule et tu passes par l'intellisense, il doit y avoir nomenum.valeurenum pas juste valeurenum
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Ok ca c'est bon merci,

    En revanche,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Using g=Graphics.FromImage(NewBitmap)
    Cela bug durant la compilation, je pense que c'est du au fait que NewBitmap fait parti de System.Drawing.Bitmap alors aue Graphics.FromImage demande un System.Drawing.Image

  14. #14
    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
    sur google tu tapes le nom de la classe suivi de msdn, ca te donnera le namespace
    tu le mets ou tu fais un imports

    en l'occurence ca doit etre system.Drawing. devant graphics

    bitmap hérite de image donc ca doit passer

    Citation Envoyé par Doudou74 Voir le message
    Cela bug durant la compilation, je pense que c'est du au fait que NewBitmap fait parti de System.Drawing.Bitmap alors aue Graphics.FromImage demande un System.Drawing.Image
    il est largement plus utile de donner le message d'erreur de compilation plutôt qu'une supposition de cause
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Toujours le même problème,

    Dans la fenêtre exécution apparait:

    Une exception de première chance de type 'System.OutOfMemoryException' s'est produite dans System.Drawing.dll

  16. #16
    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
    tu nous parlais d'un message à la compilation et maintenant c'est à l'exécution finalement ?

    outofmemoryexception c'est quand il n'y a plus assez de ram pour l'appli, tu en gères beaucoup d'images ? elles sont grandes ? tu as peu de ram ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Oui pardon, je me suis trompé.

    Pas tant d'images mais je fais pas mal de truc avant.

    Je vais essayer de faire le ménage.

    En tout cas merci pour votre aide.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Une dernière petite question sur un dernier petit problème.

    Mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim NewImage As Bitmap = Bitmap.FromFile("..\sans-titre.png")
     
    Dim NewBitmap As New Bitmap(NewImage.Width, NewImage.Height,PixelFormat.Format16bppGrayScale)
    NewBitmap.Save("..\sauvegarde",ImageFormat.Png)
    Et lors de l'execution j'obtient:
    Une exception de première chance de type 'System.Runtime.InteropServices.ExternalException' s'est produite dans System.Drawing.dll'

    Que dois-je faire ?

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    D'après ce que j'ai compris, cela signifie que l'image était sauvegardée avec le mauvais format d'image

  20. #20
    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
    est-ce une erreur interceptée dans ton code où est-ce une erreur non interceptée affiché dans la fenêtre de sortie ?

    parce que le principe en .net c'est qu'on lève des exception throw new typeexception
    les try catch interceptent les exception

    le framework est codé en grande partie en .net, les développeurs ont donc mis des try catch à certains endroit
    et quand on voit défiler exception de première chance mais qu'on ne recoit aucune erreur dans notre code c'est que l'exception était "prévue" et qu'elle n'est que rarement grave
    si l'exception est bloquante ou pose problème le framework la laisse arriver jusqu'à nous
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2014, 16h44
  2. convertir une image couleur en noir et blanc en java
    Par hadjila20 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 02/11/2012, 03h32
  3. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  4. Convertir une image couleur en niveau de gris
    Par mine87 dans le forum Flex
    Réponses: 1
    Dernier message: 29/12/2009, 12h20

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