Wie konvertiere ich die ARGB-Wert von String in Farbe?
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?
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