110gc -- DataScope Graphics Component
ライブラリリファレンス - gcBit
gcApp、 gcHeap、 gcObj、 gcRgnをまず参照してください。
(gcBit*)->d は、隠蔽データ構造である gcBit_d へのポインタとなっています。 通常のアプリケーションがこの隠蔽データへ直接アクセスする必要はありません。 固定のビットマップの場合は、ビットマップファイルをgcconvで変換して、 それをgcBitLinkDataでgcBitにするのが普通です。 また、ヒープ中に指定された大きさのワークエリア用ビットマップを確保する関数や、 DS110OSで使用している画面バッファをビットマップとして返す関数を 用いるのが普通です。typedef struct { gcBit_v* v; //予約、未使用 void* d; //領域データへのポインタ } gcBit;
隠蔽データ構造gcBit_dには2種類あります。 1つは、隠蔽データの内部にビットマップデータが並ぶもので、 もう一つは、ビットマップデータへのアドレスを持つものです。隠蔽データ自体にビットマップデータを含む場合は、次のようになります。
typedef struct { short 0; //必ず0 short bytes; //横バイト数、偶数 byte bitdata[]; //データが並ぶ } gcBit_d;ビットマップの横幅は必ずワード界つまり16ビット単位です。 データの並びは、DS110OSの画面バッファと互換性があり、 バイト単位で最上位ビットが左側のドットとなり、 次のバイトデータがその右側の8ドット分、1行が終ると下の行の左端に続きます。ビットマップデータのアドレスを指定する場合、次のようになります。
typedef struct { short 1; //必ず1 short bytes; //横バイト数、偶数 void* addr; //データが格納されているアドレス } gcBit_d;いずれの場合でも、 ビットマップには横幅以外の情報を含まないことに注意してください。 つまり、gcBitの関数群では、ビットマップの大きさは承知しておらず、 どこに描画したらよいかの情報はすべて描画領域 (gcRgn) で指定されます。
w, hは、あくまで使用メモリ量を算出するために渡すものであり、 実際の描画がそのエリア内にクリッピングされるわけではありません。 クリッピングしたい場合には、gcRgn関数群を使ってください。
【戻り値】 | 0 ☆ | メモリ不足 |
その他 | 正常 |
gcconvの制御行引数 t=1 を与えて変換したビットマップデータに対して、 この関数を呼び出してビットマップを作成することが可能です。
【戻り値】 | 0 ☆ | メモリ不足 |
その他 | 正常 |
ビットマップファイルをgcconvで変換してビットマップを作成する場合に この関数を用います。 その場合のgcconvの制御行の引数 t=0 (デフォルト) を指定します。
【戻り値】 | 0 ☆ | メモリ不足 |
その他 | 正常 |
DS110の画面バッファは、 キーボードを右側へ持っていきLCD画面を横長にした状態で定義されます。 この状態で左上のドットが最初のバイトの最上位ビットであり、 以後右方向へ進み横320ドットで40バイト、縦200ドットで計8000バイトになります。 黒いビットが1になります。 画面バッファのうち、上部320x8ドットの部分は、インジケータとして 使用されるため、アプリケーションからの使用には適しません。
画面バッファビットマップにgcBitCopyなどで転送しても、 直接LCDが書き代わるわけでもなんでもありません。 LCDに変更を反映したい場合は、gcBitDisplay関数を呼んで下さい。
この関数では、dとsに同一のビットマップを指定することにより、 オーバーラップするコピー、つまり、スクロールを行なうことができます。
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、コピーなし) |
gcBitCopyでは重なりはうまく処理できません。 ではなぜこの関数があるのかというと、gcBitMoveに比べると、 3kbほどコード使用が少なくて済むからです。
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、コピーなし) |
gcBitCopyNot | dst = ~src; |
gcBitAnd | dst &= src; |
gcBitAndNot | dst &= ~src; |
gcBitOr | dst |= src; |
gcBitOrNot | dst |= ~src; |
gcBitXor | dst ^= src; |
gcBitXorNot | dst ^= ~src; |
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、変化なし) |
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、変化なし) |
パターンはビットマップ上にはりついており、 塗りつぶすエリアを変更しても、同じドットは同じ色で塗られます。
gcBitFillPat | dst = pat; |
gcBitAndPat | dst &= pat; |
gcBitOrPat | dst |= pat; |
gcBitXorPat | dst ^= pat; |
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、変化なし) |
【戻り値】 | -1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、変化なし) |
通常、転送元ビットマップsには、 gcBitLcd関数で返される画面バッファビットマップを指定し、 (dx,dy)は(sx,sy)に一致します。 dx, dy, sx, syは、例えば、画面よりも大きいビットマップをメモリ上に確保し、 その中の一部を直接LCDへ転送する時に用います。但し、ビットがずれた転送を 行なうことはできません。つまり、(dx-sx)は、8の倍数となっている必要があります。 そうでない場合は、 一度gcBitCopyで画面バッファビットマップに転送してから、 gcBitDisplayで画面バッファビットマップをLCDへ転送するようにしてください。
実際にLCDに書き込みが行なわれる領域は、ワード界にそろえられるため、 若干大きめの領域になります。
【戻り値】 | -2 ☆ | (dx-sx)が8の倍数ではない |
-1 ☆ | 開領域/全領域 |
1 | 正常 |
2 | 正常 (空領域、変化なし) |