Frage

Ich versuche, die MakeColor Methode in der GDIPAPI Einheit zu verwenden, aber die Umwandlung von int zu byte ist mir nicht den richtigen Wert zurück.

Beispiel

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;

Was mache ich falsch?

War es hilfreich?

Lösung

Die Farbkomponenten in der Zeichenfolge sind in der gleichen Reihenfolge, wie sie in einem ARGB Wert haben würden. Daher müssen Sie nicht die Komponenten trennen, bevor sie mit MakeColor kombinieren. Sie können die Konvertierung direkt tun:

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

Das Typ-Cast ist notwendig, um einen Bereichsprüfungsfehler zu unterdrücken Sie bekommen würden, wenn die Alpha-Komponente größer als 127 war; StrToInt gibt eine Ganzzahl mit Vorzeichen, aber ARGB ist ein Typ ohne Vorzeichen.

Andere Tipps

Ändern die Art des A, R, G, B zu sein Integer schien das Problem zu beheben. Es muss etwas zu tun mit dem Gießen zwischen Integer sein. -> Byte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top