RGB(16进制)_转_TColor

ZC:内存中 COLORREF就是一个DWORD(从定义"COLORREF = DWORD;"就可以看出来),但是 具体的byte R/G/B 的位置是怎么方式的?

ZC:Windows.pas 中 函数 function RGB(r, g, b: Byte): COLORREF;

 

1、

function RGBToColor(R,G,B: byte): TColor;
begin
  Result := B Shl 16 or G  shl 8 or R;
end;

 

2、TColor 转 R/G/B

procedure ExtractRGB(const Color: Graphics.TColor; out Red, Green, Blue: Byte);
var
  RGB: Windows.TColorRef; // RGB equivalent of given Colour
begin
  RGB := Graphics.ColorToRGB(Color);  // ensures system Colours are converted
  Red := Windows.GetRValue(RGB);
  Green := Windows.GetGValue(RGB);
  Blue := Windows.GetBValue(RGB);
end;

 

3、转的:

// 1.RGB转换为Tcolor

function RGBToColor(R,G,B: byte): Tcolor;
begin
  Result := B Shl 16 or G  shl 8 or R;
end;
 

// 2.Tcolor转换为RGB
 
proceudre Tform1.Button1Clink(Sender: Tobject);
var
  Color: TColor;
  R, G, B: integer;
begin
  Color := ClBlack;
  R := Color and $FF;
  G := (Color and $FF00) shr 8;
  B := (Color and $FF0000) shr 16;
end;

 

4、

5、

 

posted @ 2016-09-02 16:49  CodeSkill  阅读(289)  评论(0编辑  收藏  举报