Comment changer la couleur d'une image ?

Lairco 5 Messages postés dimanche 5 juin 2016Date d'inscription 14 avril 2017 Dernière intervention - 13 avril 2017 à 15:37 - Dernière réponse : cs_Le Pivert 4781 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention
- 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 !
Afficher la suite 

3 réponses

Répondre au sujet
cs_Le Pivert 4781 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention - 13 avril 2017 à 16:03
0
Utile
Bonjour,

Tu trouveras tes réponses ici:


http://codes-sources.commentcamarche.net/source/53227-colormatrix-vb
Commenter la réponse de cs_Le Pivert
Lairco 5 Messages postés dimanche 5 juin 2016Date d'inscription 14 avril 2017 Dernière intervention - Modifié par Lairco le 14/04/2017 à 11:34
0
Utile
1
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 ?
cs_Le Pivert 4781 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention - 14 avril 2017 à 11:45
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

@+
Commenter la réponse de Lairco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.