1,使用 DelphiX 7 的时候,颜色输出 不正常。
DXDraw1.Surface.Fill($FF0000) ,应该是红色,但是实际不是的,是蓝色。
这个参数 是 devcolor:integer 应该是个 32位的整数,
通过 D7 查到了 delphiX 中的颜色定义是 TRGBQuads
然后 看 delphiX的 HELP, TRGBQuads is arry 255 of TRGBQuad
然后 在 d7 里面看 TRGBQuad ,是在windows.pas 里面定义的,
PRGBQuad = ^TRGBQuad;
{$EXTERNALSYM tagRGBQUAD}
tagRGBQUAD = packed record
rgbBlue: Byte;
rgbGreen: Byte;
rgbRed: Byte;
rgbReserved: Byte;
end;
TRGBQuad = tagRGBQUAD;
{$EXTERNALSYM RGBQUAD}
RGBQUAD = tagRGBQUAD;
是一个 4字节的 record ,B G R 0
又为什么颜色不对呢?
难道是 DX7 对 这32位的 加载 顺序不一样?
但是我 将 这个顺序颠倒过来也不行。 0 R G B
测试为
000000FF 为BLUE
0000FF00 为YELLOW
00FF0000 为BLACK
00FFFFFF 为WHITE
输入 定义的CLRED 不行,实际是蓝色,clbule 是黑色
万一 指出了
绘图前经常要先用指定的颜色填充表面, 譬如: DXDraw1.Surface.Fill(颜色值);
这里的颜色格式和 Delphi 的不一样, 和 HTML 使用的颜色值的顺序是一样的, 譬如: $FF0000 表示红色.
估计是 版本的问题,他用的 2009
有个人回复
使用Surface.ColorMatch()就可以把windows的RGB格式转换成Surface对应的颜色而且16位和24位颜色深度啥的都可以无视
我来试试,
DXDraw1.Surface.fill( DXDraw1.Surface.ColorMatch(clred));
终于可以正常使用 颜色定义了。