Using a union to retrieve the RGB components of a color

Using a union to retrieve the RGB components of a color

In VB.NET you can create what in C is called a union, i.e. a particular structure where you can access the same memory with different names. Here’s how you declare such a structure by using the StructLayout attribute, and specifying that you want to define the structure layout explicitly, namely how the fields will be saved in memory within the type.

 Structure ARGBColor   Dim Red As Byte   Dim Green As Byte   Dim Blue As Byte   Dim Alpha As Byte   Dim Value As IntegerEnd Structure

If you set the Value field, you’re actually setting all the 4 bytes of the structure in a single step. Otherwise you can get and set the single bytes of the structure with the other fields. Here’s how you can set the Value field of a variable of type ARGBColor to an hexadecimal value that represents a color, and then read the other fields to retrieve its RGB components:

' Split a color into its components.Dim rgb As ARGBColorrgb.Value = &H112233         ' This is equal to 1122867.Console.WriteLine(String.Format("Red={0}, Green={1}, Blue={2}", rgb.Red, _    rgb.Green, rgb.Blue))    ' => Red=51, Green=34, Blue=17

Note: this code is taken from Francesco Balena’s Programming Microsoft Visual Basic .NET book (MS Press 2002)


Share the Post: