この章の目次にもどる
前頁:1.20 queue.h にもどる
次頁:1.22 inner.h にすすむ

1.21 libwin.h

ディスプレイ・プリミティブで定義されている任意領域 ( GRGN ) を扱うためのライブラリである。

□ 基本型

typedef W   Answer;

結果を 1 または 0 で戻す。1 を Yes の意味として用いる。

typedef W   Status;

処理が行なわれた場合には 1、 処理されなかった場合は 0 として用いる。

□ 変位を表わす構造体。

typedef struct  {
    H   dh;         /* 水平方向の変位量 */
    H   dv;         /* 垂直方向の変位量 */
} Displacement;
RectGRgn
 
長方形からGRGNへの変換

【形式】

GRGN*   RectGRgn(RECT r)

【パラメータ】

RECT    r   長方形領域

【リターン値】

≠ NULL      獲得した GRGN へのポインタ
= NULL      エラー

【解説】

r で与えた領域を表現する GRGN 構造体を格納できるメモリを獲得し、 獲得した領域へのポインタを戻す。


【参照】

AndRect
 
長方形の共通部分

【形式】

RECT*   AndRect(RECT *dst, RECT *s1, RECT *s2)

【パラメータ】

RECT    *s1, *s2    元の長方形へのポインタ
RECT    *dst        2つの長方形の共通部分の格納先へのポインタ

【リターン値】

= dst       共通部分がある
= NULL      共通部分がない

【解説】

s1s2 で指定した2つの長方形の共通部分を求め、 dst で指定した領域に格納する。 共通部分が空の場合には、dst の領域には空の長方形 ( 0,0,0,0 ) を格納する。

【参照】

PtInGRgn
 
点の包含検査

【形式】

Answer  PtInGRgn(PNT pnt, GRGN *rgn)

【パラメータ】

PNT     pnt     調べたい座標をセットした点
GRGN    *rgn    対象領域

【リターン値】

= 1        対象領域内に点が含まれている
= 0        対象領域内に点が含まれていない

【解説】

pnt で指定した点が rgn で指定した領域内に含まれるか否かの判定結果を返す。


【参照】

DoesIncludeGRgn
 
領域の包含検査

【形式】

Answer  DoesIncludeGRgn(GRGN *sub, GRGN *obj)

【パラメータ】

GRGN    *sub    全体の領域
GRGN    *obj    含まれる検査対象の領域

【リターン値】

= 1      obj が sub に完全に含まれている
= 0      obj が sub に含まれていない部分がある

【解説】

obj で指定した領域が sub で指定した領域内に含まれているかどうかを検査する。

【参照】

IsIncludedGRgn()

IsIncludedGRgn
 
領域の包含検査

【形式】

Answer  IsIncludedGRgn(GRGN *sub, GRGN *obj)

【パラメータ】

GRGN    *sub    検査対象の領域
GRGN    *obj    全体の領域

【リターン値】

= 1      sub が obj に完全に含まれている
= 0      sub の内 obj に含まれていない部分がある

【解説】

obj で指定した領域が sub で指定した領域内に含まれているかどうかを検査する。 DoesIncludeGRgn の引数の順序を入れ替えたと考えて良い。

【参照】

DoesIncludeGRgn()

IsSameShapeGRgn
 
領域の形状一致検査

【形式】

Answer  IsSameShapeGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    比較の対象の領域

【リターン値】

= 1      rgn1 と rgn2 の形状が一致する
= 0      rgn1 と rgn2 の形状が一致しない

【解説】

指定した二つの領域、rgn1rgn2 の形状が一致するかどうかを検査する。
形状が一致すれば rgn1rgn2 の位置が異なっていてもよい。


【参照】

IsSameGRgn(), IsSameShapeGRgnWithDisp()


IsSameGRgn
 
領域の一致検査

【形式】

Answer  IsSameGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    比較の対象の領域

【リターン値】

= 1      rgn1 と rgn2 が一致する
= 0      rgn1 と rgn2 が異なる

【解説】

指定した二つの領域、rgn1rgn2 の形状および位置が一致するかどうかを検査する。

【参照】

IsSameShapeGRgn(), IsSameShapeGRgnWithDisp()



IsSameShapeGRgnWithDisp
 
領域の形状検査及び変位の検出

【形式】

Answer  IsSameShapeGRgnWithDisp(GRGN *rgn1, GRGN *rgn2, Displacement *disp)

【パラメータ】

GRGN            *rgn1, *rgn2    比較の対象の領域
Displacement    *disp           変位情報

【リターン値】

= 1      rgn1 と rgn2 の形状が一致する
= 0      rgn1 と rgn2 は形状が異なる

【解説】

指定した二つの領域、rgn1rgn2 の形状が一致するかどうかを検査し、 一致した場合には変位を disp に格納する。


【参照】

IsSameShapeGRgn(), IsSameGRgn()



MinimumRectOfGRgn
 
領域を含む長方形

【形式】

RECT    MinimumRectOfGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    領域

【リターン値】

≠ 空長方形  長方形領域
= 空長方形  エラー(該当の長方形なし)

【解説】

rgnで指定した領域を含む最小の長方形を戻す。

【参照】

IsEmptyGRgn
 
領域の空判定

【形式】

Answer  IsEmptyGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    領域

【リターン値】

= 1      rgn->r が空である
= 0      rgn->r は空でない

【解説】

rgn で指定した領域が空であるかどうかを調べる。
この関数は、rgn->r が空であるかどうかだけをチェックする。

【参照】

CopyGRgn
 
領域の複製

【形式】

GRGN*   CopyGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    複製元の領域

【リターン値】

≠ NULL      複製した領域のアドレス。
= NULL      エラー(複製できなかった)

【解説】

rgnで指定した領域を複製できるだけのメモリを獲得し、 そこに rgn の内容をコピーする。


【参照】

CopyAndNormalizeGRgn()

CopyAndNormalizeGRgn
 
領域の正規化複製

【形式】

GRGN*   CopyAndNormalizeGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    複製元の領域

【リターン値】

≠ NULL      複製した領域のアドレス。
= NULL      エラー(複製できなかった)

【解説】

rgn で指定した領域を複製し、 その内容を正規化する。 この関数は、CopyGRgn() を呼び出した結果に対して NormalizeGRgn() を行なうことと同じ機能を実現する。


【参照】

CopyGRgn()

CreateGRgnWithList
 
GRGN生成

【形式】

GRGN*   CreateGRgnWithList(W sy, W bx, ...)

【パラメータ】

W       sy      GRGNの開始垂直座標値
W       bx      GRGNの左オフセット
HRGN    *hr0    GRGNを構成するHRGN要素。0 個以上の任意の数指定できる。

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

指定した HRGN を含む GRGN 領域を生成する。

【参照】

CreateGRgnWithNumberAndList()

CreateGRgnWithNumberAndList
 
GRGN生成

【形式】

GRGN*   CreateGRgnWithNumberAndList(W sy, W nr, W bx, ...)

【パラメータ】

W       sy    GRGNの開始垂直座標値
W       nr    垂直座標の数
W       bx    GRGNの左オフセット
HRGN  *hr0    GRGNを構成するHRGN要素。0個以上の任意の数指定できる。

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

指定した HRGN を含む GRGN 領域を生成する。


【参照】

CreateGRgnWithList()

CreateGRgnWithVector
 
GRGN生成

【形式】

GRGN*   CreateGRgnWithVector (W sy, W bx, HRGN *hr[])

【パラメータ】

W         sy   GRGNの開始垂直座標値
W         bx   GRGNの左オフセット
HRGN   *hr[]   GRGNを構成するHRGN要素の配列で、最後の要素がNULL。

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

指定した HRGN の配列の要素を含むGRGN領域を生成する。 hr[nr]NULL になるまでを要素とみなすことを除いて、 CreateGRgnWithNumberAndVector() と同じ。


【参照】

CreateGRgnWithNumberAndVector()

CreateGRgnWithNumberAndVector
 
GRGN生成

【形式】

GRGN*   CreateGRgnWithNumberAndVector(W sy, W nr, W bx, HRGN *hr[])

【パラメータ】

W       sy      GRGNの開始垂直座標値
W       nr      垂直座標の数
W       bx      GRGNの左オフセット
HRGN    *hr[]   GRGNを構成するHRGN要素の配列

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

指定した HRGN の配列の要素を含む GRGN 領域を生成する。


【参照】

CreateGRgnWithVector ()

CreateHRgnWithNumberAndList
 
HRGN生成

【形式】

HRGN*   CreateHRgnWithNumberAndList(W nh, ...)

【パラメータ】

W   nh  水平座標値の個数
W   h1 ..   水平座標値

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

リスト形式で水平座標を指定することにより HRGN を生成する。


【参照】

CreateHRgnWithVector(), CreateHRgnWithNumberAndVector()

CreateHRgnWithVector
 
HRGN生成

【形式】

HRGN*   CreateHRgnWithVector(W hv[])

【パラメータ】

W   hv[]    水平座標値

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

配列 hv[] により水平座標値を指定することにより HRGN を生成する。
水平座標値が負の値になった所で配列の終りとみなす。


【参照】

CreateHRgnWithNumberAndList(), CreateHRgnWithNumberAndVector()



CreateHRgnWithNumberAndVector
 
HRGN生成

【形式】

HRGN*   CreateHRgnWithNumberAndVector(W nh, W hv[])

【パラメータ】

W   nh      水平座標値の個数
W   hv[]    水平座標値

【リターン値】

≠ NULL      生成した領域のアドレス
= NULL      エラー(メモリが不足した)

【解説】

配列 hv[] により水平座標値を指定することにより HRGN を生成する。


【参照】

CreateHRgnWithNumberAndList(), CreateHRgnWithVector()

DuplicateGRgn
 
GRGNの複写

【形式】

Status  DuplicateGRgn(GRGN *new, GRGN *org, W len)

【パラメータ】

GRGN    *new    複写先 GRGN 領域
GRGN    *org    複写元 GRGN 領域
W       len     複製 GRGN 個数

【リターン値】

1   正常終了
0   (サイズ不足)

【解説】

org で指定した GRGN 領域の内容を new で指定した GRGN 領域へコピーする。

リターン値が 0 ( 複写失敗 ) 時の *new の内容に関しては保証されない。


【参照】

GRgnToMask
 
GRGNのビットマスクへの変換

【形式】

void    GRgnToMask(GRGN *rgn, BMP *bmp)

【パラメータ】

GRGN    *rgn    変換対象の GRGN 領域
BMP     *bmp    変換したビットマップを格納する領域

【リターン値】

なし

【解説】

rgn で指定された GRGN 領域を bmp 上のビットマスクに変換する。 bmp は、 プレーン数 = 1、PIXBITS = 0x101 のビットマップでなくてはいけない。

rgnNormalizeGRgn() で正規化されていなければならない。

bmp->baseaddr[0] には、あらかじめ必要な大きさの領域が確保されていなければならない。
bmp->boundsrgn->r として処理される。


【参照】

NormalizeGRgn()


PtrToOffsetGRgn
 
GRGNポインタからオフセットへの変換

【形式】

void    PtrToOffsetGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    変換対象の領域

【リターン値】

なし

【解説】

GRGN の要素 ( rgn->s[ns].hp ) の値をオフセットの値に変換する。 具体的には、rgn からのオフセットに 1 を加えた値となる。


【参照】

OffsetToPtrGRgn()

OffsetToPtrGRgn
 
GRGNオフセットからポインタへの変換

【形式】

void    OffsetToPtrGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    変換対象のGRGN

【リターン値】

なし

【解説】

オフセットの値に変換されている GRGN の要素 ( rgn->s[ns].hp ) の値をポインタの値に変換する。


【参照】

PtrToOffsetGRgn()



DisposeGRgn
 
GRGN解放

【形式】

Status  DisposeGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    解放する領域

【リターン値】

常に 1

【解説】

GRGN を解放する。

rgn == NULL の場合は何も行なわない。

【参照】

CopyAndMoveGRgn
 
領域を平行移動した領域の生成

【形式】

GRGN*   CopyAndMoveGRgn(GRGN *rgn, Displacement *disp)

【パラメータ】

GRGN            *rgn    領域
Displacement    *disp   移動量

【リターン値】

≠ NULL      新たに獲得したGRGN領域へのポインタ
= NULL      エラー

【解説】

rgn で指定した領域を disp で指定した量だけ平行移動した結果を、 新たに獲得した GRGN に格納し、 そのアドレスを返す。元の rgn はそのまま残っている。


【参照】

MoveGRgn
 
領域の平行移動

【形式】

Status  MoveGRgn(GRGN *rgn, Displacement *disp)

【パラメータ】

GRGN            *rgn    平行移動する領域
Displacement    *disp   移動量

【リターン値】

= 1        移動した
= 0        移動できなかった

【解説】

rgn で指定した領域を disp で指定した量だけ平行移動する。

【参照】

MaskToGRgn
 
ビットマスクからGRGNへの変換

【形式】

GRGN*   MaskToGRgn(BMP *bmp)

【パラメータ】

BMP *bmp    変換元ビットマップへのポインタ

【リターン値】

≠ NULL      獲得したGRGN領域へのポインタ
= NULL      エラー

【解説】

bmp で指定されたビットマスクを GRGN に変換し、 そのポインタを関数値として戻す。 bmp は、 プレーン数 = 1、PIXBITS = 0x101 のビットマップでなくてはいけない。
戻された GRGN は不要になった場合、DisposeGRgn(GRGN *rgn) で開放する必要がある。


【参照】

NormalizeGRgn
 
GRGNの正規化

【形式】

Status  NormalizeGRgn(GRGN *grgn)

【パラメータ】

GRGN    *rgn    正規化する GRGN

【リターン値】

= 1        正規化により重複座標を削除した
= 0        変化がない

【解説】

GRGN 内容を正規化する。 GRGN に含まれる HRGN の範囲を正規化し、 縦軸方向に、同一のHRGN形式のラインがあれば、不要なものを削除する。

【参照】

UnionGRgn
 
領域の和

【形式】

GRGN*   UnionGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    計算対象の領域

【リターン値】

≠ 0        計算結果のGRGN領域へのポインタ
= 0        エラー

【解説】

2 個の GRGN 領域の和集合に相当する領域を計算し、 それを格納したメモリのアドレスを返す。 片方が空 ( emptyrect(rgn->r) が 1 ) の場合には、空がない方の領域を複製して、 そのアドレスを返す。

【参照】

SectGRgn(), DiffGRgn(), XorGRgn()



SectGRgn
 
領域の共通部分

【形式】

GRGN*   SectGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    計算対象の領域

【リターン値】

≠ NULL  計算結果の GRGN 領域へのポインタ
= NULL  エラー

【解説】

2 個の GRGN 領域の共通部分に相当する領域を計算し、 それを格納したメモリのアドレスを返す。
共通部分がない場合は、 空の領域に相当する GRGN 領域を作成し、 そのアドレスを返す。


【参照】

UnionGRgn(), DiffGRgn(), XorGRgn()

DiffGRgn
 
領域の差

【形式】

GRGN*   DiffGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    計算対象の領域

【リターン値】

≠ NULL  計算結果のGRGN領域へのポインタ
= NULL  エラー

【解説】

rgn1 の指す GRGN 領域から rgn2 の指す GRGN 領域を取り除いた残りの部分を求め、 それを格納した領域へのポインタを返す。


【参照】

UnionGRgn(), SectGRgn(), XorGRgn()

XorGRgn
 
領域の排他的論理和

【形式】

GRGN*   XorGRgn(GRGN *rgn1, GRGN *rgn2)

【パラメータ】

GRGN    *rgn1, *rgn2    計算対象の領域

【リターン値】

≠ NULL      計算結果のGRGN領域へのポインタ
= NULL      エラー

【解説】

2 個の GRGN 領域のどちらか片方だけに含まれるような領域を計算し、 それを格納した領域へのポインタを返す。


【参照】

UnionGRgn(), SectGRgn(), DiffGRgn()

PolyToGRgn
 
多角形からGRGNへの変換

【形式】

GRGN*   PolyToGRgn(POLY *poly)

【パラメータ】

POLY    *poly   変換対象の多角形

【リターン値】

≠ NULL      変換結果の GRGN 領域へのポインタ
= NULL      エラー

【解説】

p で指定した POLYGON の領域を GRGN に変換し、 そのポインタを関数値として戻す。 戻された GRGN は不要になった場合、 DisposeGRgn(GRGN *rgn) で開放する必要がある。 角の丸めパラメータは無視される。

【参照】

PolyToOutline
 
閉領域の抽出

【形式】

GRGN*   PolyToOutline(BMP *bmp, POLY *poly, COLOR bgcol, W frame)

【パラメータ】

BMP     *bmp    ビットマップ
POLY    *poly   閉領域を表わす多角形
COLOR   bgcol   背景色(ピクセル値)
W       frame   枠指定

【リターン値】

≠ NULL      抽出結果のGRGN領域へのポインタ
= NULL      エラー

【解説】

bmp 上のイメージの p で囲まれる部分の輪郭を GRGN として抽出し、 そのポインタを関数値として戻す。 bgcol を背景色とする。 frame == TRUE の時は、 幅 1 の枠を表わす GRGN を戻し、 frame == FALSE の時は、 枠の内側を表わす GRGN を戻す。 pで囲まれる部分がすべて背景色立った場合、 空の GRGN を戻す。

bmp の形式は planes = 1, 境界ピクセルビット数 1,2,4,8,16,32 に対応している。


【参照】

ResizeGRgn
 
領域の拡大・縮小

【形式】

Status  ResizeGRgn(GRGN *rgn, RECT *frame)

【パラメータ】

GRGN    *rgn    変換対象の領域
RECT    *frame  変換後の全体を囲む大きさの長方形

【リターン値】

= 1        変形した
= 0        変形失敗

【解説】

指定した領域を囲む長方形が frame と一致するように全体を変形する。 変形した結果は元のデータの指す領域に格納される。


【参照】

CopyAndResizeGRgn
 
領域の拡大・縮小

【形式】

GRGN*   CopyAndResizeGRgn(GRGN *rgn, RECT *frame)

【パラメータ】

GRGN    *rgn    変換対象の領域
RECT    *frame  変換後の全体を囲む大きさの長方形

【リターン値】

≠ NULL      拡大・縮小した結果の領域
= NULL      変形できなかった

【解説】

指定した領域を囲む長方形が frame と一致するように全体を変形する。 変形した結果は新たに獲得した GRGN 領域に格納され、 元のデータはそのまま残っている。


【参照】

RotateGRgn
 
領域の90度単位の回転

【形式】

GRGN*   RotateGRgn(GRGN *rgn, DEG ang)

【パラメータ】

GRGN    *rgn    変換対象の領域
DEG      ang    角度 (単位:度)

【リターン値】

≠ NULL      回転した結果の領域。
= NULL      変形できなかった

【解説】

rgn で指定した領域を ang で指定した角度だけ回転する。 結果は、新たに獲得した GRGN 領域にコピーされ、 その領域へのアドレスが返る。 ang は、0、90、180、270のいずれかでなければならない。

【参照】

SizeGRgn
 
GRGNのサイズ

【形式】

W   SizeGRgn(GRGN *rgn)

【パラメータ】

GRGN    *rgn    サイズを調べる GRGN 領域へのポインタ

【リターン値】

> 0       サイズ

【解説】

rgn で指定した領域を保存するために必要なメモリサイズを戻す。


【参照】


この章の目次にもどる
前頁:1.20 queue.h にもどる
次頁:1.22 inner.h にすすむ