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:
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.
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
Voilà maintenant la suite:
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.
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
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.
Partager