Как связать значение ARGB из строки в цвет?

StackOverflow https://stackoverflow.com/questions/2691382

  •  01-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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 Быть целым числом, казалось, это исправило проблему. Должно быть, что связано с литьем между целым числом -> байтом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top