devxlogo

Translate Color Values Faster

Translate Color Values Faster

This tip is an update to “Translate Color Values”. That method converted numbers to strings, then performed string manipulation to get individual RGB values. This solution uses a concept near and dear to C programmers-unions-and is an order of magnitude faster.

With the RGB function, VB provides a neat and valuable tool for converting separate Red, Green, and Blue values into a single Long color value. However, VB doesn’t provide any way to convert this color value back to its constituent RGB values. Enter the much-feared LSet command, which copies the storage of one user-defined type (UDT) onto another.

Put this code in a module:

 Public Type RGB_TYPE	R As Byte	G As Byte	B As Byte	Filler As ByteEnd TypePrivate Type RGB_FULL_TYPE	lngRGB As LongEnd TypePublic Function ToRGB(ByVal vlngColor As Long) _	As RGB_TYPE	Dim udtRGBFull As RGB_FULL_TYPE	udtRGBFull.lngRGB = vlngColor	' Poor man's C Union	LSet ToRGB = udtRGBFullEnd Function

To use this function, put a picture in a form's Picture property, and insert this code:

 Private Sub Form_MouseUp(Button As Integer, _	Shift As Integer, X As Single, Y As Single)	Dim udtRGB As RGB_TYPE	udtRGB = ToRGB(Point(X, Y))	With udtRGB		Me.Caption = "R=" & .R & " G=" & .G & _			" B=" & .B	End WithEnd Sub

Click on different places on the picture. VB3 users must return the values differently, because before VB4 VB didn't support the return of a UDT.

devx-admin

Share the Post: