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
- Псевдографика — текстовая графика, включая блочные символы
Ссылки
- "VT330/VT340 Programmer Reference Manual, Volume 2: Graphics Programming", Digital, EK-VT3XX-GP-002, май 1988 г.
- Chris Chiesa, All About SIXELs, 29 сентября 1990 г.
- Dickey, Thomas; Moy, Edward; Gildea, Stephen. XTerm Control Sequences. XTerm manual (31 декабря 2023).
Внешние ссылки
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.