JLC4
Messages postés
4
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 juin 2005
10 juin 2005 à 11:30
Je met le code (ya des chose inutiles, mais c'est parceque je ne met pas la totalité du code):
Dim tabImageSource(,,) As Byte
Dim tabImageModif(,,)
As
Byte
Dim tabLumSource(,)
As
Byte
Dim tabLumModif(,)
As
Integer
Dim tabIntro(53)
As
Byte
Dim fileNameSource
As
String
Dim fileNameModif
As
String = System.Environment.CurrentDirectory & "\ImageModif.bmp"
Dim test
As
Integer
Dim a, b, c, d, e, f, g, h, l, S
As
Single
Private
Sub MenuItem2_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles MenuItem2.Click
'Menu "Ouvrir"
ouverture()
End
Sub
Private
Sub ouverture()
'C'est la procédure "gérant" l'ouverture de l'image source
'On ferme vide le contenu des deux picturebox:
fermerlesimages()
With dialogueOuvrir
.Title = "Ouverture de l'image source"
.Filter = "Fichiers bmp(*.bmp)|*.bmp"
dialogueOuvrir.ShowDialog()
End
With
End
Sub
Private
Sub dialogueOuvrir_FileOk_1(
ByVal sender
As System.Object,
ByVal e
As System.ComponentModel.CancelEventArgs)
Handles dialogueOuvrir.FileOk
'On enregistre le nom de l'image que l'on ouvre:
fileNameSource = dialogueOuvrir.FileName()
'On met à 1 la variable permettant de déterminer si il y a une image ouverte ou non:
test = 1
'On "libère" la picturebox1:
If
Not (pbSource.Image
Is
Nothing)
Then
pbSource.Image.Dispose()
End
If
'On lance la procédure permettant d'extraire les données de l'image et d'en faire un tableau:
remplissageTabSource()
'On remplit la picturebox1 avec l'image ouverte:
pbSource.Image = Image.FromFile(fileNameSource)
End
Sub
Private
Sub Button4_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button4.Click
'Bouton "appliquer la matrice":
If test = 1
Then
procedureDeux()
End
If
End
Sub
Private
Sub procedureDeux()
'C'est la procédure "gérant" l'application de la matrice de convolution
'On extrait les coefficients de la matrice:
a = Val(TextBox2.Text)
b = Val(TextBox3.Text)
c = Val(TextBox4.Text)
d = Val(TextBox5.Text)
e = Val(TextBox6.Text)
f = Val(TextBox7.Text)
g = Val(TextBox8.Text)
h = Val(TextBox9.Text)
l = Val(TextBox10.Text)
'On en fait la somme:
S = a + b + c + d + e + f + g + h + l
'On verifie la condition nécessaire à l'application de la matrice:
If S = 0
Then
'En cas de problème, on affiche le message d'erreur:
MsgBox("La somme des coefficients de la matrice ne doit pas être nulle. Veuillez modifier les coefficients.")
Else
'Sinon on réinitialise la picturebox2:
reinitialiserLesPictureBoxes()
'On crée le fichier de l'image modifiée:
creeLeFichierModifDeux()
'On remplit la picturebox2 avec l'image modifiée (et l'image):
remplisLesPictureBoxes()
End
If
End
Sub
Private
Sub creeLeFichierModifDeux()
'C'est la procédure permettant de créer le tableau correspondant à l'image modifiée par l'application de la matrice de convolution
'On remplit le tableau composé des valeurs des luminosités:
remplissageDuTableauDesLuminosites()
'On crée et on remplit le tableau composé des variations de luminosités:
creerTabNouvellesLuminosites()
Dim i, j, k
As
Integer
Dim largeur
As
Integer = tabImageSource.GetLength(0)
Dim longueur
As
Integer = tabImageSource.GetLength(1)
'On redimensionne le tableau de l'image modifiée (on met du coup toutes les valeurs à 0):
ReDim tabImageModif(largeur - 1, longueur - 1, 2)
'On remplit ce tableau avec les nouvelles valeurs des luminosités:
For i = 0
To largeur - 1
For j = 0
To longueur - 1
For k = 0
To 2
If tabImageSource(i, j, k) + tabLumModif(i, j) <= 0
Then
tabImageModif(i, j, k) = 0
ElseIf tabImageSource(i, j, k) + tabLumModif(i, j) >= 255
Then
tabImageModif(i, j, k) = 255
Else
tabImageModif(i, j, k) = tabImageSource(i, j, k) + tabLumModif(i, j)
End
If
Next
Next
Next
'On crée le fichier de l'image modifiée:
ecriturefichier(fileNameModif, tabImageModif)
End
Sub
Private
Sub remplissageDuTableauDesLuminosites()
'C'est la procédure permettant d'extraire la luminosité de chaque pixel, et de la stocker dans un tableau
Dim largeur
As
Integer = tabImageSource.GetLength(0)
Dim longueur
As
Integer = tabImageSource.GetLength(1)
Dim i, j, k
As
Integer
'On redimmensionne le tableau des luminosités (toutes les valeurs sont mises égales à 0)
ReDim tabLumSource(largeur + 1, longueur + 1)
'On remplit le tableau avec la luminosité de chaque pixel:
For i = 0
To largeur - 1
For j = 0
To longueur - 1
tabLumSource(i + 1, j + 1) = tabImageSource(i, j, 0) / 3 + tabImageSource(i, j, 1) / 3 + tabImageSource(i, j, 2) / 3
Next
Next
End
Sub
Private
Sub creerTabNouvellesLuminosites()
'C'est la procédure permettant de créer et de remplir le tableau des variations de luminosités
Dim largeur
As
Integer = tabImageSource.GetLength(0)
Dim longueur
As
Integer = tabImageSource.GetLength(1)
Dim i, j
As
Integer
'On redimmensionne le tableau des variations de luminosités (toutes les valeurs sont mises égales à 0):
ReDim tabLumModif(largeur - 1, longueur - 1)
'On applique la matrice de convolution à chaque pixel, et on enregistre ces valeurs dans le tableau des variations de luminosités:
For i = 1
To largeur
For j = 1
To longueur
tabLumModif(i - 1, j - 1) = (-tabLumSource(i, j)) + tabLumSource(i - 1, j - 1) * a / S + tabLumSource(i, j - 1) * b / S + tabLumSource(i + 1, j - 1) * c / S + tabLumSource(i - 1, j) * d / S + tabLumSource(i, j) * e / S + tabLumSource(i + 1, j) * f / S + tabLumSource(i - 1, j + 1) * g / S + tabLumSource(i, j + 1) * h / S + tabLumSource(i + 1, j + 1) * l / S
Next
Next
End
Sub
Private
Sub reinitialiserLesPictureBoxes()
'Procédure permettant de réinitialiser la picturebox2:
If
Not (pbModif.Image
Is
Nothing)
Then
pbModif.Image.Dispose()
End
If
End
Sub
Private
Sub remplisLesPictureBoxes()
'Procédure permettant de remplir la picturebox2 avec l'image modifiée:
pbModif.Image = Image.FromFile(fileNameModif)
End
Sub
Private
Sub remplissageTabSource()
'C'est la procédure permettant de remplir le tableau composé de l'image ouverte (image source)
Dim myfileStream
As
New FileStream(fileNameSource, FileMode.Open, FileAccess.Read)
Dim mybinaryreader
As
New BinaryReader(myfileStream)
Dim i, j, k
As
Integer
'On commence par extraire les bits de descritpion de l'image:
For i = 0
To 53
tabIntro(i) = mybinaryreader.ReadByte
Next
'On extrait la longueur et la largeur de l'image ouverte:
Dim longueur
As
Integer = tabIntro(23) * 16 ^ 2 + tabIntro(22)
Dim largeur
As
Integer = tabIntro(19) * 16 ^ 2 + tabIntro(18)
'On redimensionne le tableau de l'image ouverte à la meme taille que l'image elle même:
ReDim tabImageSource(largeur - 1, longueur - 1, 2)
'On remplit le tableau de l'image ouverte avec la valeur RVB de chaque pixel:
For i = 0
To largeur - 1
For j = 0
To longueur - 1
For k = 0
To 2
tabImageSource(i, j, k) = mybinaryreader.ReadByte
Next
Next
Next
mybinaryreader.Close()
myfileStream.Close()
End
Sub
Private
Sub ecriturefichier(
ByVal filename
As
String,
ByVal tab
As
Byte(,,))
'C'est la procédure permettant d'écrire le fichier de l'image modifiée
Dim i, j, k
As
Integer
Dim myFileStream
As
New FileStream(filename, FileMode.Create)
Dim myBinaryWriter
As
New BinaryWriter(myFileStream)
'On écrit les bits de descritpion de l'image modifiée (les même que ceux de l'image ouverte):
For i = 0
To tabIntro.GetLength(0) - 1
myBinaryWriter.Write(tabIntro(i))
Next
'On ecrit les bits relatifs aux pixels de l'image modifiée:
For i = 0
To tab.GetLength(0) - 1
For j = 0
To tab.GetLength(1) - 1
For k = 0
To tab.GetLength(2) - 1
myBinaryWriter.Write(tab(i, j, k))
Next
Next
Next
myBinaryWriter.Close()
myFileStream.Close()
End
Sub
Private
Sub fermerlesimages()
'C'est la procédure permettant de vider le contenu des deux picturebox, et d'indiquer qu'il n'y a plus d'image chargé:
pbSource.Image =
Nothing
pbModif.Image =
Nothing
test = 0
End
Sub
End Class