110gc -- DataScope Graphics Component
gcconvの使い方
gcconvが変換対象とするのは、
Windowsのビットマップファイル(拡張子.bmp あるいは .dib)で、
1、4、8、24bit/ピクセルの、無圧縮タイプのものだけです。
gcconvが出力するのは、ビットマップデータにしろ領域データにしろ、
両方とも白黒データです。ではなぜカラーのビットマップが入力できるのでしょう?
実際には、カラーといっても、認識するのは次の8色だけです。
白(w)、黒(k)、赤(r)、緑(g)、青(b)、黄(y)、シアン(c)、マゼンタ(m)この色のうち、 どの色を0データとして扱い、どの色を1データとして扱うのかを指定できます。 例えばLCD表示のビットマップの場合、通常黒が1ですので、 ビットマップファイル中で黒色の部分が1、その他の色を0として、 ビットマップデータが書き出されます。 これを、例えば、赤と白を1、それ以外の色を0などと変更できます。
この機能を利用すると、1つのビットマップファイルから、 ORマスクとXORマスクの両方のビットマップデータを一度に生成できます。 つまり、ヌキ色にしたい部分を赤、白にしたい部分は白、黒にしたい部分は黒にした ビットマップファイルを用意します。 そして、ORマスクで、黒と白を1、それ以外の色を0にし、 XORマスクで、白を1、それ以外の色を0にすれば、
ビットマップ色 | ORマスク | XORマスク |
赤 | 0 | 0 |
黒 | 1 | 0 |
白 | 1 | 1 |
なお、色の判断はそう厳密なものではなく、 各RGBの値が128を越えるか越えないかで8色を区別しています。
@で始まる行は、gcconvへの制御行であり、ビットマップ用と領域用の2種類あります。
<ビットマップ定義>
@bit f=mybitmap.bmp t=1 c=rw
ビットマップを定義します。データはbyte(unsigned char)型で書き出されます。
引数 f にはビットマップファイルの名前を指定します。
引数 t には、出力タイプを指定します。 t=0の場合には、ビットマップの幅情報が付け加わります。 このようなビットマップデータは、gcBitLinkDataでgcBitオブジェクトにします。 t=1の場合には、ビットマップの幅情報が付加されず、 純粋にビットマップのデータが並びます。 この場合には、gcBitAllocAddrでgcBitオブジェクトにします。 それぞれについて詳しくはgcBitリファレンスを参照してください。 デフォルトではt=0です。
引数 c には、1として扱う色を指定します。wkrgbycmの8色から指定します。 デフォルトではc=k、つまり、黒のみ1として扱います。
使用例:
const byte scene1_bit_d[]= { @bit f=scene1.bmp }; ... gcBit *scene1_bit; scene1_bit= gcBitLinkData(scene1_bit_d, 0); ...
<領域定義>
@rgn f=myregion.bmp c=rk
領域を定義します。データはshort型で書き出されます。 引数 f にはビットマップファイルの名前を指定します。
引数 t が 1 の場合には、領域は反転します。つまり、開領域の定義になります。 デフォルトは t=0 で、閉領域になります。
引数 c で指定した色が領域内として扱われます。デフォルトはc=kです。
作成したデータは gcRgnLinkDataでgcRgnオブジェクトにします。 詳しくはgcRgnリファレンスを参照してください。
使用例:
const short mask1_rgn_d[]= { @rgn f=mask1.bmp }; ... gcRgn *mask1_bit; mask1_bit= gcRgnLinkData(mask1_bit_d, 0); ...