Сиксель
Sixel , сокращение от «шесть пикселей», — это формат растровой графики, поддерживаемый терминалами и принтерами DEC . Он состоит из шаблона высотой шесть пикселей и шириной одного пикселя, в результате чего получается 64 возможных шаблона. Каждому возможному шаблону присваивается символ ASCII , что упрощает передачу шестерен по 7-битным последовательным каналам.
Sixel был впервые представлен как способ отправки растровой графики на матричные принтеры DEC, такие как LA50 . После перевода в «шестиконтактный режим» следующие данные были интерпретированы для непосредственного управления шестью контактами девятиконтактной печатающей головки . Строка из шести символов кодирует одну строку изображения высотой 6 пикселей.
Позже система была повторно использована как способ отправки растровых данных на терминалы серии VT200 и VT320 при определении пользовательских наборов символов . Для передачи растрового изображения каждого символа используется серия шестерен. Эта функция известна как мягкие наборы символов или динамически переопределяемые наборы символов ( DRCS ). С помощью VT240 , VT241 , VT330 и VT340 терминалы могли декодировать на экран полное шестипиксельное изображение, подобное тем, которые ранее отправлялись на принтеры.
Описание
[ редактировать ]Sixel кодирует изображения, разбивая растровое изображение на серию горизонтальных полос высотой 6 пикселей. Каждый вертикальный столбец шириной в 1 пиксель в конкретной полосе образует один шестёрк. Пиксели каждого сикселя считываются как двоичные и кодируются в одно 6-битное число, при этом «включенные» пиксели кодируются как 1. Это число от 0 до 63 десятичных чисел затем преобразуется в один символ ASCII со смещением на 63, так что полностью черная шестерка с десятичным числом 0 кодируется как ?. Это гарантирует, что шестерки останутся в пределах диапазона печатаемых символов набора символов ASCII. Возврат каретки (CR) представлен как $и перевод строки (LF) с -; оба нужно было отправить по очереди, чтобы вернуть курсор в начало строки, CRLF.
Sixel также включает в себя элементарную форму сжатия с использованием кодирования длин серий (RLE). Это достигается с помощью ! символ, за которым следует десятичное число раз, которое необходимо повторить, а затем одиночный шестизначный символ, который необходимо повторить. Поскольку ! и десятичные цифры не могут быть действительными шестизначными данными, находящимися за пределами закодированного диапазона, кодировку легко идентифицировать и расширить обратно в программном обеспечении.
«Шестилетний режим» вводится путем отправки последовательности ESC+ Pp1;p2;p3;q. От p1 до p3 были необязательными параметрами настройки: p1 определял соотношение сторон (устарело в пользу p3), p2 - интерпретацию цвета нулей, а p3 - простые параметры размера сетки. ESC+ P — это стандартная « строка управления устройством » DEC, или DCS, которая использовалась для включения или выключения ряда специальных функций в оборудовании DEC. «q» — это шестизначный идентификатор. [а] Затем данные Sixel последовали за q. Последовательность «Строковый терминатор» ESC+ \ снова вернул устройство в обычный текстовый режим.
Для печати шестизначные числа отправляются на принтер, декодируются обратно в двоичный формат и отправляются непосредственно на шесть контактов печатающей головки. Единственная сложность заключалась в расширении RLE во внутренний буфер печати. Отображение на терминале несколько сложнее. На терминалах, поддерживающих графику, графическая система ReGIS использовалась для непосредственного рисования шестизначного шаблона в растровом изображении экрана. Это было сделано на высокой скорости путем сохранения растровых рисунков в виде глифа и последующего их копирования .
При использовании для определения пользовательских наборов символов формат был почти идентичен, хотя escape-коды изменились. С точки зрения данных, единственным существенным отличием является замена отдельного CR/LF одним /
. Например, в серии VT300 глифы символов из 80 столбцов имели ширину 15 пикселей и высоту 12, что означает, что символ можно было определить, отправив в общей сложности 30 шестерок.
Цвет также поддерживается с помощью # символ, за которым следует число, относящееся к одному из нескольких регистров цвета , которые различаются от устройства к устройству. Цвета в регистрах определяются с использованием значений RGB или HLS в особом формате DEC. Чтобы создать цветное изображение на принтере, строка из шести чисел отправляется несколько раз, каждый из которых представляет одну битовую плоскость из цветов на основе регистров на терминалах (обычно 2 или 4 бита). Поскольку возможности оборудования сильно различаются, цветной шестиугольный рисунок можно вывести только на целевые устройства. Неграфические терминалы обычно игнорируют шестизначные escape-последовательности.
Образец
[ редактировать ]<ESC>Pq #0;2;0;0;0#1;2;100;100;0#2;2;0;100;0 #1~~@@vv@@~~@@~~$ #2??}}GG}}??}}??- #1!14@ <ESC>\
В приведенном выше примере выполняется вход в режим шестизначий, устанавливаются три регистра цвета, а затем используются эти регистры для рисования шестизначных чисел в этих цветах. #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 раз, чтобы заполнить последнюю строку. $
в конце строки означает, что следующая строка будет напечатана поверх текущей строки, а -
означает, что следующая строка представляет собой новую строку из шестерок.
Примечания
[ редактировать ]- ^ Строчная буква «p» была идентификатором ReGIS.
См. также
[ редактировать ]- ReGIS - средство отображения векторной графики на более поздних терминалах DEC серии VT.
- Полуграфика - текстовая графика, включая квадратные блоки с подсимволами.
Ссылки
[ редактировать ]- «Справочное руководство программатора VT330/VT340, том 2: Графическое программирование» , Digital, EK-VT3XX-GP-002, май 1988 г.
- Крис Кьеза, «Все о SIXEL» , 29 сентября 1990 г.
- Мой, Эдвард; Гильдеа, Стивен; Дики, Томас (31 декабря 2023 г.). «Управляющие последовательности XTerm» . Руководство по XTerm .