Bonjour,

je cherche depuis le début de la soirée comment changer la couleur d'une image jpeg. J'ai passé en revue les méthodes getPixel et setPixel qui sont laborieusement longue à traiter selon la résolution de l'image.

J'ai trouvé un début de solution mais le résultat obtenu n'est pas tout à fait l'effet désiré.

Voici le code commenté au mieux :

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
 
'Ouverture de l'image de base sur laquelle travailler de 100x100 pixels
        Dim Peinture As Bitmap = System.Drawing.Image.FromFile("C:\baseImage.jpg")
 
        'Création d'un Graphics pour travailler sur l'image "Peinture" 
        Dim PeintureGraphics As Graphics = Graphics.FromImage(Peinture)
 
        'Création d'un mappage Noir -> Bleu
        Dim map(0) As System.Drawing.Imaging.ColorMap
        map(0) = New System.Drawing.Imaging.ColorMap()
        map(0).OldColor = Color.Black
        map(0).NewColor = Color.Blue
 
        'Création d'attributs d'image, avec le mappage créer juste avant comme contenu 
        Dim myAttributs As New ImageAttributes()
        myAttributs.SetRemapTable(map)
 
        Dim Rect As New Rectangle(0, 0, 100, 100)
 
        PeintureGraphics.DrawImage(Peinture, Rect, 0, 0, 100, 100, GraphicsUnit.Pixel, myAttributs)
 
        'Enregistrer la nouvelle image ;) 
        Peinture.Save("C:\imageDeSortie.jpg")
Seulement voila, mon image qui possède un motif en noir et blanc à effectivement une partie de ses pixels noirs qui ont été convertis en bleu, mais pas la totalité ! Car il y'a des nuances de couleurs et au niveau code RGB, ce n'est pas totalement noir donc il zappe ...

J'ai vu que l'on pouvait affecter une range de couleur à un objet ImageAttribute de cette façon :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Dim lowerColor As Color = Color.FromArgb(245, 0, 0)
    Dim upperColor As Color = Color.FromArgb(255, 0, 0)
    Dim imageAttr As New ImageAttributes
imageAttr.SetColorKey(lowerColor, upperColor, _
    ColorAdjustType.Default)
Mais utilisé conjointement avec mon colorMap, ainsi que de définir une range de couleurs autour du noir initial, j'avoue que je m'y perds un peu.

Un petit peu d'aide ne serait pas de refus, merci d'avance.