je n'ai l'ai jamais fait , mais je pense qu'il fait decomposer l'image pixels par pixels.
moi, j'ai repris un bout de prog qui ressemblait a:
Private Declare Function SetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal crColor As Long) As Long
Private Declare Function GetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer) As Long
Private Declare Function StretchBlt% Lib "GDI32" (ByVal hDC%, ByVal X%, ByVal Y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)
et dans la foulee voila une fonction qui recopie une image pour en donner son negatif, adapte pour pas recopier mais comparer, ca devrait aller
Sub Negative(Pic1 As PictureBox, Pic2 As PictureBox)
Dim c1x As Integer, c1y As Integer
Dim p1x As Integer, p1y As Integer
c1x = Pic1.ScaleWidth - 1
c1y = Pic1.ScaleHeight - 1
pic1hDC% = Pic1.hDC
pic2hDC% = Pic2.hDC
For p1y = 0 To c1y
For p1x = 0 To c1x
c0& = blanc - GetPixel(pic1hDC%, p1x, p1y)
If c0& <> -1 Then xret& = SetPixel(pic2hDC%, p1x, p1y, c0&)
Next
T% = DoEvents()
Next
End Sub