Comment convertir la valeur ARGB de chaîne à la couleur?
Question
Je suis en train d'utiliser la méthode de MakeColor
dans l'unité de GDIPAPI mais la conversion de int
à byte
n'est pas me retourner la valeur correcte.
Exemple
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;
Qu'est-ce que je fais mal?
La solution
Les composants de couleur dans votre chaîne sont dans le même ordre dans lequel ils auraient une valeur de ARGB
. , Vous ne devez donc séparer les composants avant de les combiner avec MakeColor
. Vous pouvez le faire directement la conversion:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
Le type moulé est nécessaire pour supprimer une erreur de vérification de la plage, vous obtiendrez chaque fois que le composant alpha était supérieur à 127; StrToInt
renvoie un entier signé, mais ARGB
est un type non signé.
Autres conseils
Modification du type de A, R, G, B
être entier semblait résoudre le problème. Il doit être quelque chose à voir avec la coulée entre Integer -.> Byte