如何将ARGB值从字符串转换为彩色?
我想在GDIPAPI单元中使用MakeColor
方法,但从int
到byte
的转换没有返回正确的值。如何将ARGB值从字符串转换为彩色?
例
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
是一个无符号类型。
@Rob,更棒!如果我只有RBG,那么呢?我只是将'ff'附加到字符串? – James 2010-04-22 14:54:59
我想你的意思是写'StrToInt',而不是'IntToStr'。 – 2010-04-22 18:42:08
是的。或者,如果你想确保你可能获得的任何颜色都是完全的,那么这个:'Result:= AlphaMask或ARGB(StrToInt('$'+ argbStr));'' – 2010-04-22 18:56:41
将A, R, G, B
的类型更改为Integer似乎解决了该问题。它必须与Integer - > Byte之间的投射有关。
两件事。首先,你的结果类型应该是什么?其次,不应该把第一个Copy调用说成1,而不是0,作为第一个参数? – 2010-04-22 14:06:34
另外,GDIAPI从哪里来?我的Delphi 2010安装中没有该单元。 – 2010-04-22 14:12:16
@Mason,我提到'MakeColor'方法在GDIPAPI单元中是它的一部分GDI + ...返回类型是一个TValue。 – James 2010-04-22 14:14:03