delphi 中的颜色

先看下常见问题

image

把这个#FF5733,粘贴在 delphi的 IDE里;

image

image

接下来对比 这2个值,得出delphi的 转换规则:

FF5733 ---->> $003357FF

你会发现规律,#FF 57 33 十进制 分别对应 R G B (255,87,51),而delphi 里变成了 $00BGR,就是说倒过来了,并在前面多加了一个字节00;IDE的自动转换逻辑:

if value.startWith('#') then
begin
  //开始自动转换
  value = '$00' + B + G + R;//倒过来
end;

以全红色举例:

image

HTML里是 #FF00000; #RGB模式;

Delphi里是 $000000FF; $00BGR模式;

{ 
  1.Delphi 中的标准写法:
    其中低3位字节代表BGR相应的颜色;
    如果最高位字节是$00,则表示用系统调色板中最相近的颜色;
    最高位字节是$01,则表示用当前调色板中最相近的颜色匹配;
    最高位字节是$02,则用当前设备描述表中逻辑调色板的次相近颜色匹配。
}
Self.Color := $000000FF;

//2.RGB 分值写法,譬如:
Self.Color := RGB(255,0,0);


接下来我们看下 Self.Color = TColor,我们看下 这个 TColor 官方的解释:

Vcl.Graphics.TColor - RAD Studio API 文档 (embarcadero.com)

VCL 中的颜色 - RAD Studio (embarcadero.com)

image

最高阶字节,是一个特殊标志,猜测如下:

标志值 代表意思
00 系统层面实现的调色板
01 用户层面实现的调色板
02 继承父级实现的调色板(可能系统,也可能用户)
posted on 2024-06-05 08:21  del88  阅读(12)  评论(0编辑  收藏  举报