我正在尝试在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;


我究竟做错了什么?

最佳答案

字符串中的颜色分量的顺序与它们在ARGB值中的顺序相同。因此,在将它们与MakeColor组合在一起之前,无需分离这些组件。您可以直接进行转换:

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


类型转换对于抑制alpha分量大于127时出现的范围检查错误是必不可少的。 StrToInt返回带符号的整数,但ARGB是无符号的类型。

关于delphi - 如何将ARGB值从字符串转换为颜色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2691382/

10-14 07:31