Herve_be
Messages postés997Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention25 mai 20232 24 nov. 2018 à 18:03
Pas de changement significatif sans les DoEvents Mais bien avec SetPixelV :
pour une image de 800 x 600 pixels : 58 secondes avec Pset, 0,9 seconde avec GDI !
Merci, problème résolu.
Pour info le but était d'étirer l'histogramme d'une photo, voici mon code
White et Black contiennent les références blanche et noire de la photo
le paramètre Refresh = Y permet de montrer la progression
Private Sub HistoStretch(Refresh As String) HistoMax = MyMax(WhiteR, WhiteG, WhiteB) HistoMin = MyMin(BlackR, BlackG, BlackB) Alpha = 255 / (HistoMax - HistoMin) Beta = -HistoMin * Alpha Photo2.DrawMode = vbCopyPen TimeStamp = Timer() For y = 0 To Photo2.ScaleHeight For x = 0 To Photo2.ScaleWidth
Pixel = GetPixel(Photo2.hdc, x, y)
R = Pixel And &HFF& G = (Pixel And &HFF00&) \ &H100& B = (Pixel And &HFF0000) \ &H10000
R = Alpha * R + Beta G = Alpha * G + Beta B = Alpha * B + Beta
If R >= 0 And G >= 0 And B >= 0 Then Call SetPixelV(Photo2.hdc, x, y, RGB(R, G, B)) End If Next x If Refresh = "Y" Then Photo2.Refresh Next y TimeStamp = Timer() - TimeStamp End Sub