代码之家  ›  专栏  ›  技术社区  ›  James

如何将argb值从字符串转换为颜色?

  •  2
  • James  · 技术社区  · 14 年前

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

    我做错什么了?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Rob Kennedy    14 年前

    字符串中的颜色组件的顺序与 ARGB 价值。因此,在将组件与 MakeColor . 您可以直接进行转换:

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

    当alpha分量大于127时,类型转换是必要的,以抑制您会得到的范围检查错误; StrToInt 返回有符号整数,但 阿尔布 是无符号类型。

        2
  •  0
  •   James    14 年前

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