Как связать значение ARGB из строки в цвет?
Вопрос
Я пытаюсь использовать MakeColor
метод в блоке GDiPapi, но преобразование из int
к byte
не возвращает меня правильное значение.
Пример
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;
Что я делаю неправильно?
Решение
Цветные компоненты в вашей строке в том же порядке, у них будет иметь в ARGB
стоимость. Поэтому вам не нужно отделить компоненты, прежде чем их сочетать MakeColor
. Отказ Вы можете сделать преобразование напрямую:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
Литой тип необходим для подавления ошибки проверки диапазона, которую вы получите, когда альфа-компонент был превышать 127; StrToInt
Возвращает подписанное целое число, но ARGB
является неподписанным типом.
Другие советы
Изменение типа A, R, G, B
Быть целым числом, казалось, это исправило проблему. Должно быть, что связано с литьем между целым числом -> байтом.