[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:
alphaOpaque);

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.



Regards,
  - Graeme -

-- 
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://opensoft.homeip.net/fpgui/




More information about the fpc-devel mailing list