2012年10月12日金曜日

VCL と FMX の Color 1

VCL の TColor は 4byte です。
定義は System.UITypes にあります。

TColor = -$7FFFFFFF-1..$7FFFFFFF;

各バイトの並びは BBGGRR となっています。
いわゆる RGB の並びにはなっていません。

Windows の COLORREF 型が BBGGRR になっているためだと思われます。

例えば↓こうなります。

$0000FF
黄色$00FFFF

最上位は特別なフラグです。
最上位に $FF が入っていると Windows の設定色を示します。

例えば↓こうなっています。

clWindow$FF000005
clBtnFace$FF00000F

他にもいくつか特別な色があります。
これらの特別な色は Vcl.Graphics.ColorToRGB; を使えば BGR 形式に変換できます。
ColorToRGB という名前ですが返ってくるのは TColor と同じ並びの BGR 形式です。
なお、RGB 形式にするのは下記の様にバイトを変換する関数が必要です。

function BGRtoRGB(const iColor: TColor): LongInt;
begin
Result := ColorToRGB(iColor);
Result :=
RGB(
(Result and $ff0000) shr 16,
(Result and $00ff00) shr 8,
(Result and $0000ff) shr 0
);
end;
Winapi.Windows.GetRValue などを使う方法もあります。

FMX の色指定は TAlphaColor です。
これについては、次回!

0 件のコメント:

コメントを投稿