[fpc-devel] Correlation between TFPColor and RGB values (possible inconsistencies)

Graeme Geldenhuys graemeg.lists at gmail.com
Wed Feb 17 13:27:30 CET 2010

Michael Van Canneyt wrote:
>> As defined by fpImage unit.
>>  colMaroon     : TFPColor = (Red: $8000; Green: $0000; Blue: $0000; Alpha:
>> alphaOpaque);
>> This is *incorrect*. It should be:
>>  colMaroon     : TFPColor = (Red: $8080; Green: $0000; Blue: $0000; Alpha:
>> alphaOpaque);
> This is not so.
> Both definitions are - within the 256-bit color plane - 100% equivalent.

I'm no color expert (maybe that shows), but I based the calculation on
ratio information only. Maroon has a red channel value in 24-bit color set
to $80. That's 128/256 giving you a 0.5 ratio. Using that ratio and the max
value per 48-bit color channel (65536) I calculated the same 48-bit red
channel color. 65536 * 0.5 = 32768 = in hex $8080.

128/255  = 32896/65536 =  red channel $80 (in RGB 24-bit) or $8080 (in
48-bit) color.

So using the same ratio for both 24-bit and 48-bit color, colMaroon is
incorrectly defined in fpImage.

Now lets apply the same ratio math to colDkGray.

  colDkGray     : TFPColor = (Red: $4000; Green: $4000; Blue: $4000; Alpha:

I know the RGB (24-bit color) of DarkGray is $40 for the Red channel. So
lets calculate the ratio or the Red channel and upscale it to 48-bit color.

 $40 hex = 64 decimal.
 64/256 = 0.25 ratio
 0.25 * 65536 max color per 48-bit channel = 16384 decimal
 16384 dec = $4000 hex.

So based on the definition of colDkGray, the ratio of the red channel is
equivalent to the known 24-bit color ratio. So colDrGray is correctly
defined in fpImage, but colMaroon is not.

I worked with values I know. I only know the hex values of Maroon and
DarkGray in 24-bit color. I tried to use Google to find the exact hex
values in 48-bit color, but couldn't find any clear information. Hence the
reason I upscaled the 24-bit color channel ratios to 48-bit. So having the
same color channel ratios in both 24-bit and 48-bit should equate to the
same color.

> Even the following would be maroon in the 256-bit color plane.
>    colMaroon     : TFPColor = (Red: $80FF; Green: $0000; Blue: $0000; Alpha: alphaOpaque);

Yes, but I'm not limiting my calculation based 24-bit color only. I'm
working with the ratio of red in 24-bit color and applying that same ration
to 48-bit color. That should mean the two colors are the same. Now using
such a ratio with the known 24-bit colors does not equate in all cases to
the 48-bit color definitions in fpImage. They are close, but not equal.

  - Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal

More information about the fpc-devel mailing list