Come faccio a convertire il valore ARGB da stringa a colori?
Domanda
Sto provando ad utilizzare il metodo MakeColor
nell'unità GDIPAPI ma la conversione da int
a byte
non mi sta tornando il valore corretto.
Esempio
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;
Che cosa sto facendo di sbagliato?
Soluzione
I componenti di colore nella stringa sono nello stesso ordine in cui avrebbero avuto un valore ARGB
. Pertanto, non è necessario separare le componenti prima combinandole con MakeColor
. Si può fare direttamente la conversione:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
Il tipo-cast è necessario per sopprimere un errore di gamma-checking si otterrebbe ogni volta che il componente alfa è stato superiore a 127; StrToInt
restituisce un intero con segno, ma ARGB
è un tipo senza segno.
Altri suggerimenti
La modifica del tipo di A, R, G, B
di essere Integer sembrava per risolvere il problema. Deve essere qualcosa a che fare con la fusione tra le Integer -.> Byte