Bonjour,

J'arrive à modifier les couleurs d'une image, mais seulement à l'écran, or, je voudrais modifier les couleurs sur l'image et non pas sur l'écran.
Faut il envoyer le handle de l'image au GetDC au lieu de 0& (l'écran je crois)?

explication de mes variables :
dim tablo(344, 3) As String : contient les 343 identifiants / couleurs à changer / nouvelles couleurs

Dans ma form j'ai juste une image ("image4") et un bouton ("commande3").

Form1 (juste la partie intéressante) :
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
 
'****************** change les couleurs à l'écran *************
    i = 2
    For x = 0 To 1280
        For y = 0 To 1024
            pixel = CouleurPixel(x, y)
            If RGB(pixel.red, pixel.green, pixel.blue) <> vbBlack And RGB(pixel.red, pixel.green, pixel.blue) <> vbWhite And RGB(pixel.red, pixel.green, pixel.blue) <> Int(tablo(i, 2)) Then
                i = 2
                While Int(tablo(i, 2)) <> RGB(pixel.red, pixel.green, pixel.blue) And i < 344
                    i = i + 1
                Wend
            End If
            If RGB(pixel.red, pixel.green, pixel.blue) <> vbBlack And RGB(pixel.red, pixel.green, pixel.blue) <> vbWhite And RGB(pixel.red, pixel.green, pixel.blue) = tablo(i, 2) And i < 344 Then
                ModifCouleurPixel x, y, tablo(i, 3)
            End If
        Next y
    Next x
module1 :
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
33
34
35
36
 
Option Compare Database
 
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
 
 
Public Type Couleur
    red As Integer
    green As Integer
    blue As Integer
End Type
 
Public Function CouleurPixel(ByVal x As Long, ByVal y As Long) As Couleur
    Dim pixel As Couleur, RGBPx As Long
    Dim hDCScreen As Long
 
    hDCScreen = GetDC(0&)
    RGBPx = GetPixel(hDCScreen, x, y)
    pixel.red = &HFF& And RGBPx
    pixel.green = (&HFF00& And RGBPx) \ 256
    pixel.blue = (&HFF0000 And RGBPx) \ 65536
    ReleaseDC 0&, hDCScreen
    CouleurPixel = pixel
End Function
 
Public Function ModifCouleurPixel(ByVal x As Long, ByVal y As Long, ByVal nouv_coul As Long) As Long
    Dim hDCScreen As Long
 
    hDCScreen = GetDC(0&)
    SetPixel hDCScreen, x, y, nouv_coul
    ReleaseDC 0&, hDCScreen
    ModifCouleurPixel = 0
End Function
De plus je constate que cela prend du temps à access de faire ce traitement sur l'image... quelqu'un a une meilleur solution?
Peut être est-ce plus rapide de modifier le bmp et de le charger ensuite? quelqu'un sait le faire?

Merci

Loïc