DelphiX 中的颜色 问题

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));

终于可以正常使用 颜色定义了。

 

上一篇:c++传递视频流到qml 的 VideoOutput


下一篇:Pset_MaterialOptical