Как я могу конвертировать значение ARGB из строки в цвет? - PullRequest
2 голосов
/ 22 апреля 2010

Я пытаюсь использовать метод 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;

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Компоненты цвета в вашей строке расположены в том же порядке, в котором они будут иметь значение ARGB. Поэтому вам не нужно разделять компоненты, прежде чем объединять их с MakeColor. Вы можете сделать преобразование напрямую:

function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
  Result := ARGB(StrToInt('$' + argbStr));
end;

Приведение типов необходимо для подавления ошибки проверки диапазона, которая возникает, когда альфа-компонент превышает 127; StrToInt возвращает целое число со знаком, но ARGB - это тип без знака.

0 голосов
/ 22 апреля 2010

Изменение типа A, R, G, B на Integer, казалось, решило проблему. Это должно быть как-то связано с приведением между Integer -> Byte.

...