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) :
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 '****************** 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
De plus je constate que cela prend du temps à access de faire ce traitement sur l'image... quelqu'un a une meilleur solution?
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
Peut être est-ce plus rapide de modifier le bmp et de le charger ensuite? quelqu'un sait le faire?
Merci
Loïc
Partager