argb値を文字列から色に変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2691382

  •  01-10-2019
  •  | 
  •  

質問

私はそれを使おうとしています 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 整数であることは、問題を修正するように見えました。それは、整数間のキャスティングと関係があるに違いありません - > byte。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top