题
我正在尝试使用 MakeColor
GDIPAPI单元中的方法,但转换为 int
到 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;
我究竟做错了什么?
解决方案
字符串中的颜色组件的顺序与它们中的顺序相同 ARGB
价值。因此,在将组件与组合结合之前,您无需分开 MakeColor
. 。您可以直接进行转换:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
每当Alpha组件大于127时,需要抑制范围检查误差所需的类型铸造; StrToInt
返回签名整数,但是 ARGB
是一种无符号类型。
其他提示
更改类型 A, R, G, B
整数似乎可以解决这个问题。这必须与整数 - >字节之间的铸造有关。
不隶属于 StackOverflow