如何将ARGB值从字符串转换为颜色?

时间:2010-04-22 13:52:16

标签: delphi gdi+ argb

我正在尝试使用GDIPAPI单元中的MakeColor方法,但从intbyte的转换并没有返回正确的值。

实施例

var
    argbStr: string;
    A, R, G, B: Byte;
begin
    argbStr := 'ffffcc88';
    A := StrToInt('$' + Copy(AValue, 1, 2));
    R := StrToInt('$' + Copy(AValue, 3, 2));
    G := StrToInt('$' + Copy(AValue, 5, 2));
    B := StrToInt('$' + Copy(AValue, 7, 2));
    Result := MakeColor(A, R, G, B);
end;

我做错了什么?

2 个答案:

答案 0 :(得分:3)

字符串中的颜色分量与ARGB值中的颜色分量相同。因此,在将组件与MakeColor组合之前,您无需将组件分开。您可以直接进行转换:

function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
  Result := ARGB(StrToInt('$' + argbStr));
end;

当alpha分量大于127时,必须使用类型转换来抑制范围检查错误。 StrToInt返回有符号整数,但ARGB是无符号类型。

答案 1 :(得分:0)

A, R, G, B的类型更改为Integer似乎解决了这个问题。它必须与Integer之间的转换有关 - >字节。