Sixel encodes images by breaking up the bitmap into a series of 6-pixel high horizontal strips. Each 1-pixel-wide vertical column in a particular strip forms a single sixel. Each sixel's pixels are read as binary and encoded into a single 6-bit number, with "on" pixels encoded as a 1. This number, from 0 to 63 decimal, is then converted into a single ASCII character, offset by 63 so that an all-black sixel, 0 decimal, is encoded as . This ensures that the sixels remain within the
printable character range of the ASCII character set: an all-white sixel is encoded as .
Carriage return (CR) is represented by , and
line feeds (LF) with a ; both had to be sent in turn to return the cursor to the start of the line, . Sixel also includes a rudimentary form of compression, using
run-length encoding (RLE). This is accomplished with the character followed by a decimal number of the times to repeat, and then a single sixel character to be repeated. Since the and decimal digits cannot be valid sixel data, lying outside the encoded range, the encoding is easy to identify and expand back out in software. "Sixel mode" is entered by sending the sequence ESC Pp1;p2;p3;q. The p1 through p3 are optional setup parameters, with p1 defining an
aspect ratio (deprecated in favor of p3), p2 how to interpret the color of zeros, and p3 with simple grid size parameters. is the standard DEC "
Device Control String", or DCS, which is used to turn on or off a number of special features in DEC's equipment. The "q" is the sixel identifier. Sixel data then follows the . The "String Terminator" sequence returns the device back to normal character mode again. For printing, sixels are sent to the printer, decoded back into binary, and sent directly to six pins in the print head. The only complexity involved expanding the RLEs into the internal print buffer. Display on a terminal is somewhat more difficult. On terminals supporting graphics, the
ReGIS graphics system was used to directly draw the sixel pattern into the screen's bitmap. This was done at high speed by storing the bitmap patterns as a glyph and then
blitting them. When used for defining custom character sets, the format was almost identical, although the escape codes changed. In terms of the data, the only major difference is the replacement of the separate CR/LF with a single /. In the
VT300 series, for instance, 80-column character glyphs were 15 pixels wide by 12 high, meaning that a character could be defined by sending a total of 30 sixels. Color is also supported using the character, followed by a number referring to one of a number of
color registers, which varied from device to device. The colors in the registers are defined using either
RGB or
HLS values in a peculiar DEC format. To create a color image on a printer, a line of sixels is sent several times, each representing a single bitplane from the register-based colors on the terminals (normally 2 or 4 bits). Since the capabilities of the hardware vary widely, a color sixel drawing can only be output to targeted devices. Non-graphics terminals generally silently ignore sixel escape sequences. ==Sample==