Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ bitmap(1) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

X(1)

BITMAP(1)  —  NEWS-OS Programmer’s Manual

名称

bitmap, bmtoa, atobm − X 用のビットマップエディタとコンバータ ユーティリティ

形式

bitmap [−options ...] filename WIDTHxHEIGHT bmtoa [−chars ...] [filename] atobm [−chars cc] [−name variable] [−xhot number] [−yhot number] [filename]

解説

bitmap プログラムは、1 と 0 かならる矩形のイメージを作成したり 編集するための基本ツールです。 X におけるビットマップの主な用途は、 クリップリージョン、カーソルの形状、アイコンの形状 およびタイルパターンや点刻パターンなどの定義です。

bmtoa および atobm フィルタは、 bitmap ファイル (ファイルのフォーマット の節を参照)から ASCII 文字列への変換と、その逆変換を行います。 これらは、ビットマップの迅速な表示や、テキストに含めるための バージョンの作成において最も多く使用されます。

使用法

bitmap はグリッド(格子)を表示します。 そのグリッドの四角一つ一つは編集中の画像内のひとつのビットを表します。 これらの四角をポインタでクリックすることによって直接、 セット、クリア、反転、の操作が行えます。 線引きや円のぬりつぶしなどのより高度な操作のためのメニューも、 グリッド脇に用意されています。 ビットマップを実際の大きさにしたものが、 通常のものと反転したもの両方でメニュー下部に表示されます。

ビットマップをカーソルを定義するのに用いるとき、 イメージ内の四角のうちのひとつを、hotspot として 指定することもあります。 hotspot はカーソルが実際にどの点を指しているかを決定します。 通常これの位置は、 鋭い先端をもったカーソル(矢印や指マークなど)ではそのマークの先端に、 対称カーソル(十字形あるいは小さな円)では中央になります。

ビットマップは、 アプリケーションでインクルードするのに適した C コードの小断片のかたちで保持されます。 これはビット配列と、 幅、高さ、ホットスポット(指定されていれば)を表す記号定数からなります。 これらは、カーソル、アイコン、タイル等を作成するのに使用することができます。

WIDTHxHEIGHT 引数で、ビットマップを新たに作成するときの 大きさを指定します(デフォルトは 16x16)。 既存のビットマップは常にその大きさで編集されます。

bitmap ウィンドウがウィンドウマネージャによってリサイズされた 場合は、グリッド内の各四角のサイズは、それに応じて縮小あるいは拡大します。

オプション

bitmap は、以下のオプションを受け付けます。

−help
許されるオプションとパラメータの簡単な説明が表示されます。

−display display
使用する X サーバ名を指定します。

−geometry geometry
スクリーン上のビットマップウィンドウの位置と大きさを指定します。 詳細は、X(1) を参照。

−nodashed
作業領域内のグリッドを点線ではなく実線で描きます。 点線の方が見た目は良くなりますが、 点線を引くのがかなり遅いサーバもあります。

−name variablename
ビットマップファイルを書き出すときに使用する変数名を指定します。 デフォルトでは、コマンド行の filename 引数の基本名が使用されます。

−bw number
メインウィンドウのボーダ幅をピクセル単位で指定します。

−fn font
ボタンに使用するフォントを指定します。

−fg color
フォアグラウンドの色を指定します。

−bg color
バックグラウンドの色を指定します。

−hl color
強調に使用する色を指定します。

−bd color
ウィンドウのボーダの色を指定します。

−ms color
ポインタ(マウス)カーソルの色を指定します。

bmtoa は、以下のオプションを受け付けます。

−chars cc
文字列バージョンのビットマップで使用する文字の組を指定します。 最初の文字は 0 のビットを、 2 番目の文字は 1 のビットを表すのに使用されます。 デフォルトでは、0 に対してダッシュ (−) が、1 に対して シャープ記号 (#) が使用されます。

atobm は、以下のオプションを受け付けます。

−chars cc
文字列バージョンのビットマップを数値配列に変換する際に 使用する文字の組を指定します。 最初の文字が 0 のビットを表し、2 番目の文字が 1 のビットを表すと解釈されます。 デフォルトでは、ダッシュ (−) を 0 として、 シャープ記号 (#) を 1 として変換を行います。

−name variable
ビットマップファイルを書き出すときに使用する変数名を指定します。 デフォルトでは、コマンド行の filename 引数の基本名が使われます。 標準入力を読み込んだ場合には空白のままになります。

−xhot number
ホットスポットの X 座標を指定します。 正の値だけが許されます。 デフォルトではホットスポット情報は含まれません。

−yhot number
ホットスポットの Y 座標を指定します。 正の値だけが許されます。 デフォルトではホットスポット情報は含まれません。

グリッドの四角の変更

グリッドの四角は、それをポインタ(マウス)カーソルでポイントして 後述のボタンのうちの 1つをクリックすることにより、 セット、クリア、反転、の操作ができます。 複数の四角は、ボタンを押したままそれらの四角にカーソルを通過させる ことによって、1 度に変更することができます。 セットされた四角はぬりつぶされ、ビットマップでは1を表します。 クリアされた四角は空で 0 を表します。

ボタン 1
このボタン(通常はポインタの最も左側)は、1つ以上の四角をセットする のに使用されます。 ビットマップ内のそれに対応するビットがオンになり(1 に設定される)、 四角がぬりつぶされます。

ボタン 2
このボタン(通常は真中)は、1以上の四角を反転させるのに使用します。 ビットマップ内のそれに対応するビットがフリップします(1 が 0 になり、 0 が 1 になります)。

ボタン 3
このボタン(通常右側)は、1つ以上の四角をクリアするのに使用されます。 ビットマップ内のそれに対応するビットがオフになり(0 に設定される)、 四角は空になります。

メニューコマンド

形状をより簡単に定義できるよう、bitmap はグリッドの全部分を 1度に描くためのコマンドを 13、ホットスポットを操作するためのコマンドを 2 つ、そしてビットマップファイルを更新して終了するためのコマンドを 2 つ提供します。 これらの操作のそれぞれに対応するコマンドボタンは、グリッドの右側にあります。

コマンドの中には、グリッドの矩形領域を処理するものもあります。 それらの領域は、コマンドボタンを押してから、カーソルを希望する領域の 左上部の四角に移動させ、ポインタボタンを押し、カーソルを下部右側の 隅(ボタンは押したまま)にまで移動し、ボタンから手を離すことにより 選択します。 カーソルを移動している間に他のボタンを押すか、 グリッド外でボタンを離せばコマンドを中止することができます。

コマンドを呼び出すには、そのコマンドボタンの上にポインタを移動させ、 いずれかのボタンをクリックします。

Clear All
このコマンドは、ボタン3 がグリッド内のあらゆる四角に対して押されたかのように、 ビットマップ内のすべてのビットをクリアするのに使用されます。 これをアンドゥすることはできません。

Set All
このコマンドは、ボタン1がグリッド内のあらゆる四角に対して押されたかのように、 ビットマップ内のすべてのビットを設定するのに使用されます。 これをアンドゥすることはできません。

Invert All
このコマンドは、ボタン2がグリッド内のあらゆる四角に対して押されたかのように、 ビットマップ内のすべてのビットを逆にするのに使用されます。

Clear Area
このコマンドは、ボタン3 がリージョン内の各四角に対して押されたかのように、 グリッドのリージョンをクリアするのに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、 クリアする領域が上記に概略されているとおりに選択されなければならないことを 示します。

Set Area
このコマンドは、ボタン1 がリージョン内の各四角に対して押されたかのように、 グリッドのリージョンを設定するのに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、設定する領域が 上記に概略されているとおりに選択されなければならないことを示します。

Invert Area
このコマンドは、ボタン2がリージョン内の各四角に対して押されたかのように、 グリッドのリージョンを逆にするのに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、 逆にする領域が上記に概略されているとおりに選択されなければならないことを 示します。

Copy Area
このコマンドは、グリッドのリージョンをある位置から別の位置に複写する のに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、 複写する領域が上記に概略されているとおりに 選択されなければならないことを示します。 次にカーソルを、リージョンの上部左隅が複写される四角上で クリックしなければなりません。

Move Area
このコマンドは、グリッドのリージョンをある位置から別の位置に 移動するのに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、 移動する領域が上記に概略されているとおりに 選択されなければならないことを示します。 次にカーソルを、リージョンの上部左隅が移動される四角上で クリックしなければなりません。 リージョンの元の位置にあり、新しい位置にはない四角はどれもクリアされます。

Overlay Area
このコマンドは、グリッドのリージョンをある位置から別の位置に複写する のに使用されます。 このコマンドが呼び出された場合は、カーソルは形状を変え、 複写する領域が上記に概略されているとおりに 選択されなければならないことを示します。 次にカーソルを、リージョン上部左隅がオーバレイされる四角上でクリック しなければなりません。 リージョン内で設定される四角だけが、新しい位置でタッチされます。

Line このコマンドは、2点間のラインに各四角を設定します。 このコマンドが呼び出された場合は、カーソルは形状を変え、 ポインタがラインの両端上でクリックされなければならないことを示します。

Circle
このコマンドは、中心点と曲線上の点によって指定される円上に四角を設定します。 このコマンドが呼び出された場合は、カーソルは形状を変え、 ポインタが円の中心上でクリックされてから曲線上の点で クリックされなければならないことを示します。 グリッドのサイズと離散ピクセルを用いて作業しなければならないという 制限のために、小さい円は余り丸く見えないこともあります。

Filled Circle
このコマンドは、中心点と曲線上の点によって指定される円内のすべての 四角を設定します。 このコマンドが呼び出された場合は、カーソルは形状を変え、 ポインタが円の中心点上でクリックされてから、 曲線上の点上でクリックされなければならないことを示します。 円をぬりつぶすためのあらゆる四角が設定されます。

Flood Fill
このコマンドは、すべてのクリアする四角を包囲形状に設定します。 このコマンドが呼び出された場合は、カーソルは形状を変え、 ポインタはぬりつぶす形状内の任意の空の四角上でクリックされなければならない ことを示します。 示された四角と水平あるいは垂直に隣接するすべての空の四角は、 包囲形状に並べられます。 形状がクローズされないとグリッド全体がぬりつぶされます。

Set Hot Spot
このコマンドは、ビットマップがカーソルを定義するのに使用される場合は、 グリッド内の 1つの四角をホットスポットとして指定します。 このコマンドが呼び出された場合は、カーソルは形状を変え、 ポインタはホットスポットを含むために 四角上でクリックされなければならないことを示します。

Clear Hot Spot
このコマンドは、ビットマップからあらゆる指定されたホットスポットを削除します。

Write Output
このコマンドは、コマンド行上に指定されたファイル名に対する ビットマップを表す C コードの小さい断片を書き込みます。 ファイルがすでに存在する場合は、新しいファイルを作成する前に、 元のファイルは filename~ に再命名されます。 ビットマップファイルの再命名または書き込みのどちらかにおいてエラーが 生じた場合は、対話ボックスが現れ、ビットマップ が 代わりに /tmp/filename を使用しなければならないか否かを尋ねます。

Quit このコマンドは、bitmap にビットマップをセーブして(それが変更 された場合)から、終了しなければならないか否かを尋ねる対話ボックスを 表示させます。 yes と応答すると、Write Output を呼び出すのと同じ結果を 生じ、no と応答すると、bitmap は単に終了し、cancel と 応答すると、Quit コマンドが中止され、さらに変更を行うことができます。

ファイルのフォーマット

Write Output コマンドは、ビットマップをプログラムに変換でき、 X ツールキットのピクスマップリソースによって参照でき、 その他のプログラムによって操作でき (xsetroot 参照)、 あるいは種々のプログラミングライブラリ中のユーティリティルーチンを 使用して読み込むことのできる簡単な C プログラムの断片としてストアします。 ビットマップならびにホットスポット(指定されている場合)の幅と高さは、 ファイルの初めにプリプロセッサのシンボルとして書き込まれます。 それからビットマップイメージは文字の配列として書かれます。

        #define name_width 11
        #define name_height 5
        #define name_x_hot 5
        #define name_y_hot 2
         static char name_bits[] = {
            0x91, 0x04, 0xca, 0x06, 0x84,
            0x04, 0x8a, 0x04, 0x91, 0x04
        };

プリプロセッサのシンボルとビット配列に対する name プレフィックス は、コマンド行に与えられた filename 引数から構成されます。 どんなディレクトリでも、名前の前部(プレフィックス)はとられ、ピリオド で始まるサフィックスもとられます。 それ以外のアルファベット文字は、下線と置き換えられます。 name_x_hot および name_y_hot シンボルは、ホットスポット が Set Hot Stop コマンドを使用して指定された場合にだけ存在します。

配列内の各文字には、イメージのひとつの行からの 8 ビットが含まれます (行はその終わりで 8 の倍数になるよう埋込みが行われ、これを可能にします)。 行は、左から右へ、そして上から下へ書かれます。 配列の最初の文字は最上行の1番左側の 8 ビットを保ち、最後の文字は、 1番下の行の最も右側の 8 ビット(埋込みを含む)を保ちます。 各文字において、ビットマップ内の1番左側のビットは、文字内の最下位ビットです。

このプロセスは、行をそれぞれ 8 ビットを含んだ語に分割し、 ビットを各語ごとに逆にし(アラビア数字は右側に有効数字をもち、 イメージは左側に最下位ビットをもっているためです)、 そして各語を 2 進から 16 進数に翻訳することによって、 ビジュアルに表示することができます。
 

下記の例においては、左側の 1 と 0 の配列は X11 とスペルする 5 行と 11 列を含むビットマップを表しています。 右側は、長さが 8 の倍数 (16) となるように、0 が埋め込まれた各行をもった 8 ビットの語に分割された左側と同じ配列です。

10001001001            10001001 00100000
01010011011            01010011 01100000
00100001001            00100001 00100000
01010001001            01010001 00100000
10001001001            10001001 00100000

ビットマップの埋め込みと分割が行われた各語内のビットを逆にすると、 下記の左側の数字が生じます。 各語を 16 進数として解釈すると、右側の数字配列が生じます。

10010001 00000100            0x91 0x04
11001010 00000110            0xca 0x06
10000100 00000100            0x84 0x04
10001010 00000100            0x8a 0x04
10010001 00000100            0x91 0x04

次に、左から右へ、上から下へ各行を読み取ることによって、文字配列が 生じます。

        static char name_bits[] = {
           0x91, 0x04, 0xca, 0x06, 0x84,
           0x04, 0x8a, 0x04, 0x91, 0x04
        };

bmtoa プログラムを使用して、表示やテキストファイルへの保管の ために bitmap ファイルを文字配列に変換することができます。 atobm プログラムを使用して、文字列を bitmap フォーマットに 変換し、戻すことができます。

プログラムでのビットマップの使用

bitmap ファイルのフォーマットは、X プログラム内で簡単に 使用することのできるビットマップとカーソルを作るよう設計されています。 下記のコードを使用して、this.cursor および this_mask.cursor で定義されたビットマップからカーソルを作成することができます。

        #include "this.cursor"
        #include "this_mask.cursor"
         XColor foreground, background;
        /∗ フォアグラウンドとバックグラウンドカラーの構造体をフィルする ∗/
        Pixmap source = XCreateBitmapFromData (display, drawable,
                this_bits, this_width, this_height);
        Pixmap mask = XCreateBitmapFromData (display, drawable,
                this_mask_bits, this_mask_width, this_mask_height);
        Cursor cursor = XCreatePixmapCursor (display, source, mask,
                foreground, background, this_x_hot, this_y_hot);

Bitmap (点刻を必要とするルーチンとともに使用されるシングルプレーン の Pixmap)、あるいはフルデプスの Pixmap (ウィンドウのバックグラウンド およびボーダに使用されることが多い) においては、bitmap ファイルに 読み込んだり、ファイル内のデータを返すのにそれ以外のルーチンを使用する こともできます。 アプリケーションの著者は、プログラムが正しくカラーおよび白黒 ディスプレイ上で機能するよう、Bitmaps と Pixmaps の相違を慎重に 理解しなければなりません。

旧バージョンとの互換性のために、bitmap は X10 フォーマット の bitmap ファイルも受け付けます。 ただし、ファイルがそれに再度書き出される場合は、それは X11 フォーマット となります。

X のデフォルト

bitmap は下記のリソースを使用します。

Background
ウィンドウのバックグラウンドの色。 ビットマップにおいて 0 であるビットは、この色で表示されます。 このオプションは、カラーディスプレイ上でだけ役に立ちます。 デフォルト値は 白 です。

BorderColor
ボーダの色。 このオプションは、カラーディスプレイ上でだけ役に立ちます。 デフォルト値は 黒 です。

BorderWidth
ボーダの幅。 デフォルト値は 2 です。

BodyFont
テキストのフォント。 デフォルト値は 変数 です。

Dashed
“off” の場合、 bitmap はグリッドの線を実線で描きます。 デフォルト値は “on” です。

Foreground
フォアグラウンドの色。 ビットマップ内で 1 であるビットは、この色で表示されます。 このオプションは、カラーディスプレイ上でだけ役に立ちます。 デフォルト値は 黒 です。

Highlight
強調の色。 bitmap はこの色を使って、ホットスポットを示し、 Move Area、 Copy Area、 Set Area、 Clear Area、 および Invert Area コマンドによって影響を受ける矩形領域を示します。 強調の色が指定されない場合は、 bitmap を逆にすることにより強調します。 このオプションは、カラーディスプレイ上でだけ役に立ちます。

Mouse
ポインタ(マウス)カーソルの色。 このオプションは、カラーディスプレイ上でだけ役に立ちます。 デフォルト値は 黒 です。

Geometry
ビットマップウィンドウのサイズと位置。

Dimensions
新しいビットマップを作成するときに使用される WIDTHxHEIGHT 。

関連事項

X(1), Xlib − C Language X Interface (particularly the section on Manipulating Bitmaps), XmuReadBitmapDataFromFile

バグ

古いコマンド行引数は、他の X プログラムと一致しません。

ポインタボタンを押したままポインタを早く動かしすぎると、 失われてしまう四角もあります。 これは、X サーバがポインタの位置を試すことのできる頻度に対する制限の ため起こります。

コマンド行上で指定されたもの以外のファイルに書込みを行う方法はありません。

プログラムが起動されてしまってから、 ビットマップのサイズを変更する方法はありません。

undo コマンドはありません。

著作権

Copyright 1988, Massachusetts Institute of Technology. 
権利と許可の声明文については X(1) を参照のこと。

著者

bitmap by Ron Newman, MIT Project Athena; documentation, bmtoa, and atobm by Jim Fulton, MIT X Consortium. 

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026