我正在尝试使用GDIPAPI单元中的MakeColor
方法,但从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;
我做错了什么?
答案 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之间的转换有关 - >字节。