2

我正在尝试使用MakeColorGDIPAPI 单元中的方法,但是从intto的转换byte没有返回正确的值。

例子

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;

我究竟做错了什么?

4

2 回答 2

3

字符串中的颜色分量与它们在ARGB值中的顺序相同。因此,在将它们与MakeColor. 您可以直接进行转换:

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

类型转换对于抑制 alpha 分量大于 127 时出现的范围检查错误是必要的;StrToInt返回一个有符号整数,但ARGB它是无符号类型。

于 2010-04-22T14:39:15.873 回答
0

将类型更改A, R, G, B为 Integer 似乎可以解决问题。它必须与 Integer -> Byte 之间的转换有关。

于 2010-04-22T14:29:10.120 回答