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.