このページの本文へ

Windows Info 第462回

Windows Terminal Preview版でSixelグラフィックスを扱う

2024年12月29日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷
Sixel

Sixelグラフィックスは、エスケープシーケンスを使って、ターミナル上にグラフィックスを描画できる

 Windows Terminalのプレビュー版V.1.22には、Sixelと呼ばれるグラフィックス機能が搭載されている。Sixelは、縦6ドットを単位としたグラフィックス描画機能である。

 描画はエスケープシーケンスを介するが、Sixel描画に対応したアプリケーションがあれば、Windows Terminalでも利用可能だ。

 たとえば、Image Magickは、以前からSixelに対応しているため、WindowsやLinux(WSL)の両方で画像ファイルをSixel表示させることができる。

Sixel

Sixelは、1980年台にDECのVT200シリーズに実装された機能で、いくつかの端末エミュレーターが対応している。このため、ImageMagickはSixelに対応しており、画像ファイルをターミナルに表示できる

 また、Linuxには、「LibSixel」と呼ばれるライブラリがあり、これに「im2sixel」コマンドがある。どちらも画像ファイルをSixelグラフィックスでターミナル内に表示できる。

Sixel

Linuxでは、SixelグラフィックスをLibSixelで扱える。LibSixelは、イメージをSixelで出力、あるいは逆(Sixelからイメージ)の処理ができる

そもそもSixelとは?

 Sixelとは、「Six+Pixel」の意味で、縦6ドットを単位としたグラフィック機能を指す。いわゆるユーザー定義文字をエスケープシーケンスで実現するためのデータ表現形式として、1980年代に作られたDEC社のVT200シリーズに搭載された。これをDRCS(Dynamically Redefined Character Set)という。

 VT240/241、後継機種のVT300などでは、DRCSのデータ形式をグラフィックス表現形式として利用した。これがグラフィックス描画機能としてのSixelの始まりである。

 ユーザー定義文字を作るため、縦に並ぶドットを単位とした。6ドットに制限されたのは、エスケープシーケンス中でアルファベット文字としてビットを表現するためである。ターミナルの画面に表示されたアルファベット1文字は、Sixelでは、10×10ピクセルである。日本語など全角文字では20×10ドットになる。

Sixel

Sixelは、10×10ピクセルで、ターミナル上の半角文字(ASCIIコード)と同じ大きさになり、日本語は20×10ピクセルに相当する

 多くの端末や端末ソフトウェアでは、カーソル位置は、次に文字が表示される位置を示す。つまり、最後に表示された文字の後ろにカーソルが置かれる。Sixelも現在のカーソル位置を起点にするが、Sixelの描画は、文字カーソル位置に影響を与えない。

Sixel

一般にターミナルでは、カーソル位置は次に文字が表示される位置を示し、最後に表示された位置の直後にある

 この記事では便宜的に、Sixelの描画位置を「Sixelポインタ」、描画されるピクセル(縦6ドット単位)をSixelと呼ぶ。Sixelが描画されるたびにSixelポインタは右に1ピクセル移動する。次のSixelは、隣の列に移る。

 Sixelでは、一度に背景色(0のビット)と描画色(1のビット)の2色しか描画できない。このため、1つのSixelに複数色を描画したい場合、描画色を変えて再度描画する(方法は後述)。このとき、0のビットは、既存の描画に影響を与えない。

 Sixelの描画には、以下のエスケープシーケンスを使う。

CSI q [<カラーレジスタ定義>] <描画色指定> <Sixel文字> ST
CSI = Esc P
ST = \ Esc またはCtrl+G
カラーレジスタ定義 = #<カラーレジスタ番号> ; 2 ; <R値(%)> ; <G値(%)> ; <B値(%)>
描画色指定 = # <カラーレジスタ番号>
Sixel文字参照
(以下の表参照)

Sixel

Sixelの描画は、カーソル位置から始まる。エスケープシーケンスを使い、文字で縦6 bitのピクセルを表す。なお、同じ文字を繰り返す場合には、「!<回数>;<Sixel文字>」という形式でデータを圧縮できる

Sixel

 同じSixelに再描画する場合には、Sixelポインタの初期値(カーソル位置)に、復帰する「$」(Sixelではこれをキャリッジリターンと呼ぶ)を使う。

Sixel

Sixelのエスケープシーケンスでは、0から255の数値で表されるカラーレジスタを定義して、描画色として指定できる。また、Sixelポインタの初期値に復帰する「$」(キャリッジリターン)や、Sixelポインタ初期値の6ピクセル下にSixelポインタを設定する「-」(ニューライン)が使える

 エスケープシーケンスに「$」を入れると、その時点で、Sixelポインタが初期値(カーソル位置)に戻る。ここで描画色を切り替えて再度描画する。

 現在のSixel位置の下を描画するときには、「-」(同ニューライン)を使う。ニューラインでは、Sixelポインタは初期位置の6ピクセル下に設定される。

 ここまでが基本だが、Sixelを使うためには、カーソル位置の制御などもする必要がある。また、Sixel描画はカーソル位置を変えないため、カーソル位置を設定してやらないと、後続する文字表示がSixel描画を上書きしてしまう。このあたりを含め、次回もう少し詳しくSixelを見ていくことにする。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン