Setting a pixel color

Setting a pixel color

The PSet method is much slower than it should actually be, and in most cases you will find it convenient to substitute it with direct calls to the SetPixel API functions. This function is about twelve times faster than the VB’s method, at least when you can set the form’s ScaleMode to Pixels, for more or less the same reasons for which the GetPixel API function is faster than the Point method. The next routine changes all red pixels to yellow, and is about 2.5 times faster than an equivalent routine built on VB’s equivalent methods:

Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, _    ByVal y As Long) As LongDeclare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, _    ByVal y As Long, ByVal crColor As Long) As LongPrivate Sub Form_Click()    Dim x As Long, y As Long, h As Long    h = Me.hdc        ' assumes that form's ScaleMode    ' is set to 3 - Pixels    For y = 0 To ScaleHeight - 1        For x = 0 To ScaleWidth - 1            If GetPixel(h, x, y) = vbRed Then                SetPixel h, x, y, vbYellow            End If        Next    NextEnd Sub


Share the Post: