stringtranslate.com

Sixel

El logotipo de Wikipedia convertido al formato Sixel y renderizado en Konsole .

Sixel , abreviatura de "six pixels", es un formato gráfico 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 hace que los sixels sean fáciles de transmitir 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 matriciales DEC como la LA50 . Después de ponerlo 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 caracteres sixel codifica una sola fila de la imagen de 6 píxeles de alto.

El sistema se reutilizó posteriormente como una forma de enviar datos de mapa de bits a las terminales de la serie VT200 y VT320 al definir conjuntos de caracteres personalizados . Se utiliza una serie de seisels para transferir el mapa de bits de cada carácter. Esta característica se conoce como conjuntos de caracteres suaves o conjuntos de caracteres redefinibles dinámicamente ( DRCS ). Con los VT240 , VT241 , VT330 y VT340 , los terminales podían decodificar una imagen de seisel completa en la pantalla, como las que se enviaban anteriormente 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 tira 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 "encendidos" codificados como un 1. Este número, de 0 a 63 decimal, se convierte luego en un solo carácter ASCII, desplazado por 63 de modo que un sixel completamente negro, 0 decimal, se codifica como ?. Esto garantiza que los sixels permanezcan dentro del rango de caracteres imprimibles del conjunto de caracteres ASCII. El retorno de carro (CR) se representa con , y los saltos de línea (LF) con un ; 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, utilizando 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 repetirá y luego un solo carácter sixel que se repetirá. Dado que los dígitos decimales y no pueden ser datos sixel válidos, que se encuentran fuera del rango codificado, la codificación es fácil de identificar y expandir nuevamente en el software.!!

El "modo Sixel" se ingresa enviando la secuencia + . Los parámetros p1 a p3 eran parámetros de configuración opcionales, donde p1 definía una relación de aspecto (obsoleta en favor de p3), p2 cómo interpretar el color de los ceros y p3 con parámetros de tamaño de cuadrícula simples. + es la " cadena de control del dispositivo " o DCS estándar de DEC, que se usaba para activar o desactivar una serie de características especiales en el equipo de DEC. La "q" es el identificador Sixel. [a] Los datos Sixel luego seguían a la q. La secuencia "String Terminator" + devolvía el dispositivo al modo de caracteres normal nuevamente.ESCPp1;p2;p3;qESCPESC\

Para imprimir, los sixels se envían a la impresora, se decodifican de nuevo en binario y se envían directamente a seis pines en el cabezal de impresión. La única complejidad consistió en expandir los RLE en el búfer de impresión interno. La visualización en un terminal es algo más difícil. En terminales que admiten gráficos, se utilizó el sistema de gráficos ReGIS para dibujar directamente el patrón de sixels 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 transfiriéndolos .

Cuando se utilizaba para definir conjuntos de caracteres personalizados, el formato era casi idéntico, aunque cambiaban los códigos de escape. En términos de datos, la única diferencia importante es el reemplazo del CR/LF independiente por un único /. 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 podía definirse enviando un total de 30 sixels.

El color también se admite mediante el carácter , seguido de un número que hace referencia a uno de varios 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 una línea de seisels varias veces, cada uno representando 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 seisels en color solo se puede enviar a dispositivos específicos. Los terminales no gráficos generalmente ignoran silenciosamente las secuencias de escape de seisels.#

Muestra

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

El ejemplo anterior ingresa al modo sixel, configura tres registros de color y luego utiliza esos registros para dibujar sixels en esos colores. Esto #0;2;0;0;0se interpreta como "establecer registro de color 0, usar 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 el 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 líneas de datos siguientes seleccionan un color, amarillo para la primera y la tercera y verde para la del medio, y luego dibujan seisels. La última línea muestra el RLE en uso, lo que significa "repetir @( 0b100000) 14 veces". El resultado 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 seisels.

Notas

  1. ^ La "p" minúscula era el identificador de ReGIS.

Véase también

Referencias

Enlaces externos