2

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;

私は何を間違っていますか?

4

2 に答える 2

3

文字列の色成分は、ARGB値と同じ順序になっています。したがって、コンポーネントをと組み合わせる前にコンポーネントを分離する必要はありませんMakeColor。直接変換を行うことができます:

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

型キャストは、アルファコンポーネントが127より大きい場合に発生する範囲チェックエラーを抑制するために必要です。StrToInt符号付き整数を返しますARGBが、符号なし型です。

于 2010-04-22T14:39:15.873 に答える
0

タイプをA, R, G, B整数に変更すると、問題が解決したようです。これは、整数->バイト間のキャストと関係があるはずです。

于 2010-04-22T14:29:10.120 に答える