GetDC sur une image au lieu de l'écran
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:
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:
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