argb値を文字列から色に変換するにはどうすればよいですか?
質問
私はそれを使おうとしています MakeColor
Gdipapiユニットのメソッドですが、からの変換 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;
私は何が間違っているのですか?
解決
あなたの文字列のカラーコンポーネントは、彼らが持っているのと同じ順序であります ARGB
価値。したがって、コンポーネントを結合する前にコンポーネントを分離する必要はありません MakeColor
. 。あなたは直接変換を行うことができます:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
タイプキャストは、Alphaコンポーネントが127を超えるときはいつでも取得するレンジチェックエラーを抑制するために必要です。 StrToInt
署名された整数を返しますが ARGB
署名されていないタイプです。
他のヒント
タイプの変更 A, R, G, B
整数であることは、問題を修正するように見えました。それは、整数間のキャスティングと関係があるに違いありません - > byte。
所属していません StackOverflow