我正在尝试使用 MakeColor GDIPAPI单元中的方法,但转换为 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 是一种无符号类型。

其他提示

更改类型 A, R, G, B 整数似乎可以解决这个问题。这必须与整数 - >字节之间的铸造有关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top