Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Visual Basic
Expertise: Intermediate
Oct 14, 1999

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 Byte
End Type

Private Type RGB_FULL_TYPE
	lngRGB As Long
End Type

Public 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 = udtRGBFull
End 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 With
End 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.
Richard Lindauer
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date