Sixel - Sixel

El logotipo de Wikipedia convertido a formato sixel y renderizado en un xterm con emulación VT340 .

Sixel , abreviatura de "seis píxeles", es un formato de gráficos de mapa de bits compatible con terminales e impresoras de DEC . Consiste en un patrón de seis píxeles de alto y uno de ancho, lo que da como resultado 64 patrones posibles. A cada patrón posible se le asigna un carácter ASCII , lo que facilita la transmisión de los sixels en enlaces seriales de 7 bits.

Sixel se introdujo por primera vez como una forma de enviar gráficos de mapa de bits a impresoras de matriz de puntos DEC como la LA50 . Después de ser puesto en "modo sixel", los siguientes datos se interpretaron para controlar directamente seis de los pines en el cabezal de impresión de nueve pines . Una cadena de seis caracteres codifica una única fila de la imagen de 6 píxeles de alto.

Posteriormente, el sistema se reutilizó como una forma de enviar datos de mapa de bits a los terminales de la serie VT200 y VT320 al definir conjuntos de caracteres personalizados . Se utilizan una serie de seis celdas para transferir el mapa de bits de cada carácter. Esta característica se conoce como juegos de caracteres suaves o juegos de caracteres redefinibles dinámicamente (DRCS). Con el VT240 , VT241 , VT330 y VT340 , los bornes pueden decodificar una imagen Sixel completo a la pantalla, al igual que los anteriormente enviado a las impresoras.

Descripción

Sixel codifica imágenes dividiendo el mapa de bits en una serie de tiras horizontales de 6 píxeles de alto. Cada columna vertical de 1 píxel de ancho en una franja particular forma un solo sixel. Los píxeles de cada sixel se leen como binarios y se codifican en un solo número de 6 bits, con los píxeles "activados" codificados como 1. Este número, de 0 a 63 decimal, se convierte luego en un solo carácter ASCII, compensado por 63 para que un sixel completamente negro, 0 decimal, se codifica como ?. Esto asegura que los seises permanezcan dentro del rango de caracteres imprimibles del juego de caracteres ASCII. El retorno de carro (CR) está representado por $, y los avances de línea (LF) con a -; ambos tenían que enviarse a su vez para devolver el cursor al inicio de la línea CRLF,.

Sixel también incluye una forma rudimentaria de compresión, que utiliza codificación de longitud de ejecución (RLE). Esto se logra con el !carácter seguido de un número decimal de las veces que se van a repetir, y luego un solo carácter de seis letras que se va a repetir. Dado que los !dígitos decimales y no pueden ser datos seisel válidos, que se encuentran fuera del rango codificado, la codificación es fácil de identificar y expandir en el software.

El "modo Sixel" se ingresa enviando la secuencia ESC+ Pp1;p2;p3;q. El p1 al p3 eran parámetros de configuración opcionales, con p1 definiendo una relación de aspecto (en desuso a favor de p3), p2 cómo interpretar el color de los ceros y p3 con parámetros de tamaño de cuadrícula simples. ESC+ Pes la " Cadena de control de dispositivos " estándar de DEC , o DCS, que se utilizó para activar o desactivar una serie de funciones especiales en los equipos de DEC. La "q" es el identificador sixel. Los datos de Sixel luego siguieron a la q. La secuencia "Detener texto" ESC+ \devolvió el dispositivo al modo de carácter normal nuevamente.

Para imprimir, se envían seis celdas a la impresora, se vuelven a decodificar en binario y se envían directamente a seis pines en el cabezal de impresión. La única complejidad implicó expandir los RLE en el búfer de impresión interno. La visualización en un terminal es algo más difícil. En los terminales que admiten gráficos, se utilizó el sistema de gráficos ReGIS para dibujar directamente el patrón de sixel en el mapa de bits de la pantalla. Esto se hizo a alta velocidad almacenando los patrones de mapa de bits como un glifo y luego blittándolos .

Cuando se usaba para definir juegos de caracteres personalizados, el formato era casi idéntico, aunque los códigos de escape cambiaron. En términos de datos, la única diferencia importante es el reemplazo del CR / LF separado por uno solo /. En la serie VT300, por ejemplo, los glifos de caracteres de 80 columnas tenían 15 píxeles de ancho por 12 de alto, lo que significa que un carácter podría definirse enviando un total de 30 seises.

El color también se admite mediante el #carácter, seguido de un número que hace referencia a uno de los registros de color , que varían de un dispositivo a otro. Los colores en los registros se definen utilizando valores RGB o HLS en un formato DEC peculiar. Para crear una imagen en color en una impresora, se envía varias veces una línea de sixels, cada una de las cuales representa un solo plano de bits de los colores basados ​​en registros en los terminales (normalmente 2 o 4 bits). Dado que las capacidades del hardware varían ampliamente, un dibujo de seis colores solo se puede enviar a dispositivos específicos. Los terminales sin gráficos generalmente ignoran silenciosamente las secuencias de escape de sixel.

Muestra

El código Sixel de muestra que dice "HI" se muestra en un xterm con emulación VT340 .
 <ESC>Pq
 #0;2;0;0;0#1;2;100;100;0#2;2;0;100;0
 #1~~@@vv@@~~@@~~$
 #2??}}GG}}??}}??-
 #1!14@
 <ESC>\

El ejemplo anterior ingresa al modo sixel, configura tres registros de color y luego usa esos registros para dibujar sixel en esos colores. Se #0;2;0;0;0interpreta como "establecer el registro de color 0, utilizar el modo 2 (modo RGB), establecer R, G y B en 0%". Esto establece el color 0 en negro, y los siguientes comandos establecen el registro 1 en amarillo (100%, 100%, 0%) y 2 en verde (0%, 100%, 0%). A diferencia de la mayoría de los sistemas modernos que asignan un valor de 8 bits (0-255) a cada canal de color, el modo RGB se basa en la "intensidad" de cada canal de 0% a 100%.

Las siguientes líneas de datos seleccionan un color, amarillo para el primero y tercero y verde para el medio, luego dibuja seis seises. La última línea muestra el RLE en uso, lo que significa "repetir @( 0b100000) 14 veces". La salida final es de 14 píxeles por 7 píxeles, por lo que la última línea simplemente se repite 0b10000014 veces para llenar la última línea. $al final de una línea significa que la siguiente línea sobreimprimirá la línea actual, mientras -que significa que la siguiente línea representa una nueva línea de seis.

Notas

Ver también

  • ReGIS (el lenguaje de gráficos DEC)
  • Squot (punto cuadrado)

Referencias

enlaces externos