Zitat von Luiz Americo Pereira Camara <luiz...@oi.com.br>:
Mattias Gaertner escreveu:
On Wed, 17 Feb 2010 06:52:25 -0300
Luiz Americo Pereira Camara <luiz...@oi.com.br> wrote:
fpimage is not documented at all AFAIK.
It's not loosing bits if your information, in previous mail, about
TFPColor format is correct.
Defining colGray, and related, as TFPColor = (Red: $8080; Green:
$8080; Blue: $8080; Alpha: alphaOpaque) would make it work.
... would make it work with a 24bit color image that uses one pixel
color conversion *$101, div $100.
It won't work on a 24bit color image that uses color conversion *$100,
div $100 or on any other format.
Are you saying that TFPColor is just a container for any 48bit
format and has not a defined format?
It is defined as a RGBA format. AFAIK there is no definition how
TFPCustomImage.Get/SetColor map this to 24bit RGB.
The point is that the TFPColor constants are inconsistently defined.
$8000 is exactly the middle. It is the right value for gray.
OK.
If i understand correctly, you are saying that in TFPColor format
$0000 means black (no color in the channel) $FFFF means white (full
color in the channel) and between them you get the remaining
intensity.
Assuming that, giving a color in 24bit RGB (one byte per channel)
where $00 means no color $FF full color, if a channel is on the
middle ($80 = 128) it would be equivalent to $8000 in the 48bit
format, right? LazIntfImage is returning $8080.
The LCL uses the $101 to get full 16bit white/black, and full
alpha/opaque, so you can use Colors[x,y]=colWhite and
Colors[x,y].Alpha=alphaOpaque. This makes porting many algorithms
easier.
About gray:
gray is the middle between black and white. But the middle between
black (0) and white (255) is 127.5 which does not fit into 8bit. So a
gray of $80 is somewhat to bright. The LCL converts $80 to $8080 which
is also somewhat above the real gray in 16 bit: $7fff.8 (32767.5).
If channel is $40 (=64) in 24bit, it should not map to $4000 in
48bit? LazIntfImage is returning $4040
If channel is $2 (=2) in 24bit, it should not map to $0200 in 48bit?
LazIntfImage is returning $2020
If channel is $1 (=1) in 24bit, it should not map to $0100 in 48bit?
LazIntfImage is returning $1010
AFAIK, it should not be difficult to fix that (assuming is broken).
All in all, this is not an issue for me and i won't take any longer
if other agree that there's nothing broken.
IMO nothing is broken, just gray is a rounded value and converting a
rounded value between various precisions creates rounding errors.
Mattias
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel