BITMAP(1) — UNIX 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 フィルターは、ASCII 文字列へ、および ASCII 文字列から bitmap ファイル (FILE FORMAT) を変換します。 これらは、ビットマップの迅速な表示、およびテキストに含めるための バージョンの生成において最も多く使用されています。
使用法
bitmap はグリッド(格子)を表示し、そのグリッドの各四角は編集中の 画像内のビット1を表します。 それらの四角をポインタ上のボタンで直接設定、クリア、あるいは逆に することができ、線引きや円のぬりつぶしなどのよりハイレベルの操作の メニューは、グリッドのサイドに用意されています。 ビットマップの実際のサイズバージョンは、通常のものでも反転された ものでもメニュー下部に現れます。
ビットマップがカーソルを定義するのに使用される場合は、イメージ内の 四角のうちのひとつが、hotspot として指定されることもあります。 これによって、カーソルが実際にどこを指しているかが決まります。 鋭い先のもの(矢印や指マークなど)をもったカーソルに関しては、これは通常 そのマークの終わりにあります。 対称カーソル(十字形あるいは小さな円)に関しては、これは通常中央に あります。
ビットマップは、アプリケーション内に含めるのに適した小さい C コードの 断片としてストアされます。 これらは、ビットの配列、ならびにカーソル、アイコン、およびタイルを 作成するのに使用することのできる幅、高さ、およびホットスポット(指定 されている場合)を示す記号定数を提供します。
WIDTHxHEIGHT 引数で、新しいビットマップを作成するときに使用する サイズが与えられます(デフォルトは 16x16 です)。 既存のビットマップは常に現在のサイズで編集されます。
bitmap ウィンドウがウィンドウマネージャによってサイズ変更された 場合は、グリッド内の各四角のサイズは、それに応じて縮小あるいは拡大します。
オプション
bitmap は、下記のオプションを受け付けます。
−help
このオプションで、許されるオプションとパラメータの簡単な説明が表示されます。
−display display
このオプションは、使用する X サーバ名を指定します。
−geometry geometry
このオプションは、スクリーン上のビットマップウィンドウの位置とサイズを 指定します。 詳細は、X を参照。
−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 (ディスプレイ, drawable,
this_bits, this_width, this_height);
Pixmap mask = XCreateBitmapFromData (ディスプレイ, drawable,
this_mask_bits, this_mask_width, this_mask_height);
Cursor cursor = XCreatePixmapCursor (ディスプレイ, ソース, マスク,
フォアグラウンド, バックグラウンド, 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 3.3