Преобразование 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()
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()
Комментарии
Отправить комментарий