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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top