[fpc-devel] Correlation between TFPColor and RGB values (possible inconsistencies)
Mattias Gaertner
nc-gaertnma at netcologne.de
Wed Feb 17 02:08:09 CET 2010
On Tue, 16 Feb 2010 17:15:37 -0300
Luiz Americo Pereira Camara <luizmed at oi.com.br> wrote:
> While trying to get the RGB values (bytes) of a TFPColor i got confused
> about the format of TFPColor
>
> Some hardcoded colors (unit FPImage) like colGray, colTea sets the high
> byte value of Red, Green, Blue fields with the corresponding byte value
> of RGB and leaves the low byte with 0.
>
> Other colors like colWhite or colFuchsia sets both low and high byte of
> the fields with the corresponding RGB values.
>
> So whats the correlation of RGB byte values and TFPColor?
RGB, TColor uses range of 0-$ff and TFPColor uses Word so range is
0-$ffff, so you can multiple each by $101. Another way is to copy the
byte (c shl 8+c).
Note: The reverse is *not* to divide by $101. (e.g. $fffe div $101 =
$fe, but it should be mapped to $ff). The reverse is to divide by $100
(or "shr 8").
And note that this is a "per pixel" conversion, which might not be the
best way.
> Should colWhite be redefined as colWhite : TFPColor = (Red: $ff00;
> Green: $ff00; Blue: $ff00; Alpha: alphaOpaque)
No. That's not fully white.
$ff*$101 = $ffff
> or
>
> colGray be redefined as colGray : TFPColor = (Red: $8080; Green:
> $8080; Blue: $8080; Alpha: alphaOpaque) ??
Yes, although this rarely makes a difference.
> This info will help to fix http://bugs.freepascal.org/view.php?id=15793
IMO the bug report is misleading. Converting a TFPColor to RGB looses
bits. You should not assume that the 48bit FPColor constants
support 24 bit RGB. The FPColor constants don't support other RGB
formats like 5-6-5 neither and there are many different algorithms to
scale picture resolutions.
Mattias
More information about the fpc-devel
mailing list