Sixel

Sixel (от англ. six pixels — шесть пикселей) — это формат растровой графики, поддерживаемый терминалами и принтерами от DEC. Он состоит из узора высотой в шесть пикселей и шириной в один (в чёрно-белом варианте), что даёт 64 возможных узора. Каждому возможному узору присваивается символ ASCII, что упрощает передачу сикселей по 7-битным последовательным линиям связи.

Изначально Sixel был представлен как способ отправки растровой графики на матричные принтеры DEC, такие как LA50. После перевода в «режим sixel» последующие данные интерпретировались для прямого управления шестью из девяти иголок печатающей головки. Строка символов sixel кодирует одну строку изображения высотой 6 пикселей.

Позже система была повторно использована как способ отправки растровых данных на терминалы серий VT200 и VT320 при определении пользовательских наборов символов. Для передачи растрового изображения каждого символа используется серия сикселей. Эта функция известна как «мягкие» наборы символов или динамически переопределяемые наборы символов (DRCS). В терминалах VT240, VT241, VT330 и VT340 можно было декодировать полное изображение в формате sixel на экран, подобно тому, как это ранее отправлялось на принтеры.

Описание

Sixel кодирует изображения, разбивая растровое изображение на серию горизонтальных полос высотой 6 пикселей. Каждый вертикальный столбец шириной в 1 пиксель в определенной полосе образует один сиксель. Пиксели каждого сикселя считываются как двоичные данные и кодируются в одно 6-битное число, при этом «включенные» пиксели кодируются как 1. Это число, от 0 до 63 в десятичной системе, затем преобразуется в один символ ASCII со смещением на 63, так что полностью черный сиксель (0 в десятичной системе) кодируется как ?. Это гарантирует, что сиксели остаются в диапазоне печатаемых символов набора ASCII: полностью белый сиксель кодируется как ~. Возврат каретки (CR) представлен символом $, а перевод строки (LF) — символом -; оба символа должны были отправляться по очереди, чтобы вернуть курсор в начало строки (CRLF).

Sixel также включает элементарную форму сжатия с использованием кодирования длин серий (RLE). Это достигается с помощью символа !, за которым следует десятичное число повторений, а затем один символ sixel, который нужно повторить. Поскольку ! и десятичные цифры не могут быть действительными данными sixel, находясь вне диапазона кодирования, кодировку легко идентифицировать и распаковать программно.

"Режим Sixel" активируется отправкой последовательности ESC+Pp1;p2;p3;q. Параметры p1-p3 были необязательными параметрами настройки: p1 определял соотношение сторон (устарел в пользу p3), p2 — как интерпретировать цвет нулей, а p3 — простые параметры размера сетки. ESC+P — это стандартная для DEC "Device Control String" (DCS), которая использовалась для включения или выключения ряда специальных функций в оборудовании DEC. "q" является идентификатором sixel. Строчная "p" была идентификатором ReGIS. Данные Sixel следовали за q. Последовательность "String Terminator" ESC+\ возвращала устройство в обычный символьный режим.

Для печати сиксели отправляются на принтер, декодируются обратно в двоичный формат и напрямую отправляются на шесть иголок печатающей головки. Единственная сложность заключалась в распаковке RLE во внутренний буфер печати. Отображение на терминале несколько сложнее. На терминалах, поддерживающих графику, графическая система ReGIS использовалась для прямого рисования узора sixel в растровом изображении экрана. Это делалось с высокой скоростью путем сохранения растровых узоров в виде глифов и их последующего блиттинга.

При использовании для определения пользовательских наборов символов формат был почти идентичен, хотя управляющие последовательности менялись. С точки зрения данных, единственное существенное отличие — замена отдельных CR/LF на один символ /. Например, в серии VT300 глифы символов для 80-колоночного режима имели размер 15 пикселей в ширину и 12 в высоту, что означало, что символ можно было определить, отправив в общей сложности 30 сикселей.

Цвет также поддерживается с помощью символа #, за которым следует число, ссылающееся на один из нескольких цветовых регистров, которые различались в зависимости от устройства. Цвета в регистрах определяются с использованием значений RGB или HLS в своеобразном формате DEC. Для создания цветного изображения на принтере строка сикселей отправляется несколько раз, каждая из которых представляет одну битовую плоскость из регистровых цветов на терминалах (обычно 2 или 4 бита). Поскольку возможности оборудования сильно различаются, цветной рисунок sixel можно выводить только на целевые устройства. Неграфические терминалы обычно молча игнорируют управляющие последовательности sixel.


Пример

␛Pq
#0;2;0;0;0#1;2;100;100;0#2;2;0;100;0
#1~~@@vv@@~~@@~~$
#2??}}GG}}??}}??-
#1!14@
␛\

Приведенный выше пример входит в режим sixel, настраивает три цветовых регистра, а затем использует эти регистры для рисования сикселей этими цветами. #0;2;0;0;0 интерпретируется как «установить цветовой регистр 0, использовать режим 2 (режим RGB), установить R, G и B в 0%». Это устанавливает цвет 0 в черный, а следующие команды устанавливают регистр 1 в желтый (100%, 100%, 0%) и 2 в зеленый (0%, 100%, 0%). В отличие от большинства современных систем, которые присваивают 8-битное значение (0–255) каждому цветовому каналу, режим RGB основан на «интенсивности» каждого канала от 0% до 100%.

Следующие строки данных выбирают цвет: желтый для первой и третьей и зеленый для средней, а затем рисуют сиксели. Последняя строка показывает использование RLE, что означает «повторить @ (0b100000) 14 раз». Окончательный результат — 14 на 7 пикселей, поэтому последняя строка просто повторяет 0b100000 14 раз, чтобы заполнить последнюю строку. $ в конце строки означает, что следующая строка будет надпечатывать текущую (т.е. выводить поверх текущей), в то время как - означает, что следующая строка представляет собой новую строку сикселей.

Примечания

См. также

  • ReGIS — средство отображения векторной графики на более поздних терминалах DEC серии VT
  • Псевдографика — текстовая графика, включая блочные символы

Ссылки

Внешние ссылки