Преобразование HEX-строки в изображение

Наверняка, вам знаком музыкальный плеер AIMP, и наверняка вы видели, что при выборе языка локализации рядом с его названием нарисован флаг.

Обычно подобные приложения получают данные из текстовой строки. Символы в такой строке идут парами и представляют собой шестнадцатиричное значение. Наша цель - преобразовывать значение таких пары к целому числу. Ниже находится процедура, которая на вход получает подобную строку, а в выходную переменную помещает уже готовое изображение (иконку).

procedure HexToIcon(const HexData: string; out Icon: TIcon);
var
 
MemoryStream: TMemoryStream;
  N, MaxLen: Integer;
  B: Byte;
begin
 
// Вычисляем максимальную длину строки
 
MaxLen := Length(HexData);

  // Инициализируем поток
 
MemoryStream := TMemoryStream.Create();

  try
   
// Устанавливаем поток в позицию 0
   
MemoryStream.Position := 0;

    // Перебираем попарно символы строки
   
N := 1;
    while N <= MaxLen do
    begin
     
// Преобразуем HEX в число
     
B := StrToInt('$' + Copy(HexData, N, 2));

      // Помещаем в поток
     
MemoryStream.Write(B, 1);
      N := N + 2;
    end;

    // Устанавливаем позицию потока на 0
   
MemoryStream.Position := 0;
    // Читаем данные из потока
   
Icon.LoadFromStream(MemoryStream);
  finally
   
MemoryStream.Free();
  end;
end// HexToIcon()

Комментарии

Популярные сообщения из этого блога

Гибкое управление свойствами доступности элементов управления в обычных формах 1С:Предприятия 8.х

Уважаемые выпускники, мажьтесь солнцезащитными кремами

По ту сторону сна