Comment changer la couleur d'une image ?

Lairco Messages postés 5 Date d'inscription dimanche 5 juin 2016 Statut Membre Dernière intervention 14 avril 2017 - 13 avril 2017 à 15:37
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 14 avril 2017 à 11:45
Bonjour, pour mon projet ISN de terminal, je suis en train de réaliser une sorte de photoshop ( très simplifié et limité bien sûr), je suis sur visual basic 2010 express.

Je voudrais avoir les fonctionnalité du genre :
- mettre un effet (sépia, noir/blanc, négatif, etc.. ) sur une image choisi
- mettre 3 (voir plus) trackbars pour changer les nuances d'une couleur en particulier (rouge, vert et bleu pour commencer) .

J'ai réussi a faire les effets négatif et noir/blanc mais ils prennent beaucoup de temps a se mettre Et je ne vois pas trop comment faire les trackbars.

 Private Sub NégatifToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NégatifToolStripMenuItem1.Click
Dim dessin As New Bitmap(PictureBox1.Image)

With dessin
For i As Integer = 0 To .Width - 1
For j As Integer = 0 To .Height - 1
r = Int(.GetPixel(i, j).R)
v = Int(.GetPixel(i, j).G)
b = Int(.GetPixel(i, j).B)
.SetPixel(i, j, Color.FromArgb(255 - r, 255 - v, 255 - b))
Next
Next
End With
PictureBox1.Refresh()
PictureBox1.Image = dessin
End Sub

Private Sub NoirEtBlancToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NoirEtBlancToolStripMenuItem.Click

Dim dessin As New Bitmap(PictureBox1.Image)
Dim gris As Integer
With dessin
For i As Integer = 0 To .Width - 1
For j As Integer = 0 To .Height - 1
r = Int(.GetPixel(i, j).R)
v = Int(.GetPixel(i, j).G)
b = Int(.GetPixel(i, j).B)
gris = (0.2125 * r + 0.7154 * v + 0.0721 * b)
.SetPixel(i, j, Color.FromArgb(255, gris, gris, gris))
Next
Next
End With
PictureBox1.Refresh()
PictureBox1.Image = dessin

End Sub


--> ces 2 boutons marche mais ça prend beaucoup de temps, alors que :

'Private Sub DsTableau()

' For j = 0 To H
' For i = 0 To L
' Couleur1(i, j) = Dessin.GetPixel(i, j)
' Next
' Next
'End Sub

'Private Sub LbNégatif_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LbNégatif.Click

' Dim RVB As Color
' RVB = Color.FromArgb(255, R, V, B)

' For j As Integer = 0 To H
' For i As Integer = 0 To L
' Couleur1(i, j) = Color.FromArgb(255, 255 - Couleur1(i, j).R, 255 - Couleur1(i, j).G, 255 - Couleur1(i, j).B)
' Dessin.SetPixel(i, j, Couleur1(i, j))
' 'redéfinit la couleur de chaque pixel de l'image contenue ds la variable Image

' Next
' Next
' PictBImage.Image = Dessin 'affiche le nouveau contenu de Dessin.



'End Sub
'Private Sub BtGris_Click(sender As System.Object, e As System.EventArgs) Handles BtGris.Click
' Dim RVB As Color
' RVB = Color.FromArgb(255, R, V, B)
' Dim gris As Integer
' For j As Integer = 0 To H
' For i As Integer = 0 To L
' gris = (0.2125 * Couleur1(i, j).R + 0.7154 * Couleur1(i, j).G + 0.0721 * Couleur1(i, j).B)
' Couleur1(i, j) = Color.FromArgb(255, gris, gris, gris)
' Dessin.SetPixel(i, j, Couleur1(i, j))
' Next
' Next
' PictBImage.Image = Dessin
' End Sub


çà c'est ce que l'on a vu en classe, c'est beaucoup plus rapide mais çà ne marche pas quand j'essaie de l'adapter a mon projet

----> Comment je peux faire pour améliorer ces boutons et comment commencer les trackbars ?

Merci !

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
13 avril 2017 à 16:03
0
Lairco Messages postés 5 Date d'inscription dimanche 5 juin 2016 Statut Membre Dernière intervention 14 avril 2017
Modifié le 14 avril 2017 à 11:34
Merci, ça m'a un peu aider pour faire autre chose, j'ai utilisé que ça pour le moment :

 Private Sub BtRV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtRV.Click
' Display the red, green, and blue component images.
Dim image_attr As New ImageAttributes
Dim cm As ColorMatrix
Dim rect As Rectangle = _
Rectangle.Round(PictureBox2.Image.GetBounds(GraphicsUnit.Pixel))
Dim wid As Integer = PictureBox2.Image.Width
Dim hgt As Integer = PictureBox2.Image.Height
Dim bm As Bitmap
Dim gr As Graphics
Dim theta As Single

' Swap red/green.
bm = New Bitmap(wid, hgt)
gr = Graphics.FromImage(bm)
theta = PI / 6
cm = New ColorMatrix(New Single()() { _
New Single() {0.0, 1.0, 0.0, 0.0, 0.0}, _
New Single() {1.0, 0.0, 0.0, 0.0, 0.0}, _
New Single() {0.0, 0.0, 1.0, 0.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 1.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 0.0, 1.0}})
image_attr.SetColorMatrix(cm)
gr.DrawImage(PictureBox1.Image, rect, 0, 0, wid, hgt, _
GraphicsUnit.Pixel, image_attr)
PicRV.Image = bm

' Swap green/blue.
bm = New Bitmap(wid, hgt)
gr = Graphics.FromImage(bm)
theta = PI / 3
cm = New ColorMatrix(New Single()() { _
New Single() {1.0, 0.0, 0.0, 0.0, 0.0}, _
New Single() {0.0, 0.0, 1.0, 0.0, 0.0}, _
New Single() {0.0, 1.0, 0.0, 0.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 1.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 0.0, 1.0}})
image_attr.SetColorMatrix(cm)
gr.DrawImage(PictureBox1.Image, rect, 0, 0, wid, hgt, _
GraphicsUnit.Pixel, image_attr)
PicVB.Image = bm

' Swap blue/red.
bm = New Bitmap(wid, hgt)
gr = Graphics.FromImage(bm)
theta = PI / 2
cm = New ColorMatrix(New Single()() { _
New Single() {0.0, 0.0, 1.0, 0.0, 0.0}, _
New Single() {0.0, 1.0, 0.0, 0.0, 0.0}, _
New Single() {1.0, 0.0, 0.0, 0.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 1.0, 0.0}, _
New Single() {0.0, 0.0, 0.0, 0.0, 1.0}})
image_attr.SetColorMatrix(cm)
gr.DrawImage(PictureBox1.Image, rect, 0, 0, wid, hgt, _
GraphicsUnit.Pixel, image_attr)
PicBR.Image = bm

End Sub


qu'est que je dois modifier (et où ?) dans le code pour faire un effet, sépia par exemple, sans utilisé le "dim rect as rectangle ..." qui, si j'ai bien compris, m'oblige a avoir 4 pictures box; comment ou par quoi je le modifie pour utilisé un seul pictureBox1 et qui change en sépia avec un bouton ?

-> il faut déjà enlever tout ce qui a au dessous de " swap green/blue" dans le code au dessus mais après ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié le 14 avril 2017 à 11:47
Dans le programme indiqué, tout est expliqué. Je ne vais pas faire ton devoir à ta place. Ceci est contraire aux règles de ce forum.
Je suis un autodidacte, ce programme je l'ai fait seul avec l'aide de Google.

Voici un autre programme qui ne fait que le noir et blanc et le sépia, si cela peut t'aider?

http://codes-sources.commentcamarche.net/source/view/53161/1251791

@+
0
Rejoignez-nous