この章の目次にもどる
前頁:1.20 queue.h
にもどる
次頁:1.22 inner.h
にすすむ
ディスプレイ・プリミティブで定義されている任意領域
( GRGN
) を扱うためのライブラリである。
□ 基本型
typedef W Answer;
結果を 1 または 0 で戻す。1 を Yes の意味として用いる。
typedef W Status;
処理が行なわれた場合には 1、
処理されなかった場合は 0 として用いる。
□ 変位を表わす構造体。
typedef struct {
H dh; /* 水平方向の変位量 */
H dv; /* 垂直方向の変位量 */
} Displacement;
【形式】
GRGN* RectGRgn(RECT r)
【パラメータ】
RECT r 長方形領域
【リターン値】
≠ NULL 獲得した GRGN へのポインタ
= NULL エラー
【解説】
r
で与えた領域を表現する GRGN
構造体を格納できるメモリを獲得し、
獲得した領域へのポインタを戻す。
【参照】
【形式】
RECT* AndRect(RECT *dst, RECT *s1, RECT *s2)
【パラメータ】
RECT *s1, *s2 元の長方形へのポインタ
RECT *dst 2つの長方形の共通部分の格納先へのポインタ
【リターン値】
= dst 共通部分がある
= NULL 共通部分がない
【解説】
s1
と s2
で指定した2つの長方形の共通部分を求め、
dst
で指定した領域に格納する。
共通部分が空の場合には、dst
の領域には空の長方形 ( 0,0,0,0 )
を格納する。
【参照】
【形式】
Answer PtInGRgn(PNT pnt, GRGN *rgn)
【パラメータ】
PNT pnt 調べたい座標をセットした点
GRGN *rgn 対象領域
【リターン値】
= 1 対象領域内に点が含まれている
= 0 対象領域内に点が含まれていない
【解説】
pnt
で指定した点が
rgn
で指定した領域内に含まれるか否かの判定結果を返す。
【参照】
【形式】
Answer DoesIncludeGRgn(GRGN *sub, GRGN *obj)
【パラメータ】
GRGN *sub 全体の領域
GRGN *obj 含まれる検査対象の領域
【リターン値】
= 1 obj が sub に完全に含まれている
= 0 obj が sub に含まれていない部分がある
【解説】
obj
で指定した領域が sub
で指定した領域内に含まれているかどうかを検査する。
【参照】
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 の形状が一致しない
【解説】
指定した二つの領域、rgn1
、rgn2
の形状が一致するかどうかを検査する。
形状が一致すれば rgn1
、rgn2
の位置が異なっていてもよい。
【参照】
IsSameGRgn(), IsSameShapeGRgnWithDisp()
【形式】
Answer IsSameGRgn(GRGN *rgn1, GRGN *rgn2)
【パラメータ】
GRGN *rgn1, *rgn2 比較の対象の領域
【リターン値】
= 1 rgn1 と rgn2 が一致する
= 0 rgn1 と rgn2 が異なる
【解説】
指定した二つの領域、rgn1
、rgn2
の形状および位置が一致するかどうかを検査する。
【参照】
IsSameShapeGRgn(), IsSameShapeGRgnWithDisp()
IsSameShapeGRgnWithDisp |
|
領域の形状検査及び変位の検出 |
|
【形式】
Answer IsSameShapeGRgnWithDisp(GRGN *rgn1, GRGN *rgn2, Displacement *disp)
【パラメータ】
GRGN *rgn1, *rgn2 比較の対象の領域
Displacement *disp 変位情報
【リターン値】
= 1 rgn1 と rgn2 の形状が一致する
= 0 rgn1 と rgn2 は形状が異なる
【解説】
指定した二つの領域、rgn1
、rgn2
の形状が一致するかどうかを検査し、
一致した場合には変位を disp
に格納する。
【参照】
IsSameShapeGRgn(), IsSameGRgn()
MinimumRectOfGRgn |
|
領域を含む長方形 |
|
【形式】
RECT MinimumRectOfGRgn(GRGN *rgn)
【パラメータ】
GRGN *rgn 領域
【リターン値】
≠ 空長方形 長方形領域
= 空長方形 エラー(該当の長方形なし)
【解説】
rgn
で指定した領域を含む最小の長方形を戻す。
【参照】
【形式】
Answer IsEmptyGRgn(GRGN *rgn)
【パラメータ】
GRGN *rgn 領域
【リターン値】
= 1 rgn->r が空である
= 0 rgn->r は空でない
【解説】
rgn
で指定した領域が空であるかどうかを調べる。
この関数は、rgn->r
が空であるかどうかだけをチェックする。
【参照】
【形式】
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()
【形式】
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
のビットマップでなくてはいけない。
rgn
は NormalizeGRgn()
で正規化されていなければならない。
bmp->baseaddr[0]
には、あらかじめ必要な大きさの領域が確保されていなければならない。
bmp->bounds
は rgn->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()
【形式】
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
はそのまま残っている。
【参照】
【形式】
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)
で開放する必要がある。
【参照】
【形式】
Status NormalizeGRgn(GRGN *grgn)
【パラメータ】
GRGN *rgn 正規化する GRGN
【リターン値】
= 1 正規化により重複座標を削除した
= 0 変化がない
【解説】
GRGN
内容を正規化する。
GRGN
に含まれる HRGN
の範囲を正規化し、
縦軸方向に、同一のHRGN形式のラインがあれば、不要なものを削除する。
【参照】
【形式】
GRGN* UnionGRgn(GRGN *rgn1, GRGN *rgn2)
【パラメータ】
GRGN *rgn1, *rgn2 計算対象の領域
【リターン値】
≠ 0 計算結果のGRGN領域へのポインタ
= 0 エラー
【解説】
2 個の GRGN
領域の和集合に相当する領域を計算し、
それを格納したメモリのアドレスを返す。
片方が空 ( emptyrect(rgn->r)
が 1 )
の場合には、空がない方の領域を複製して、
そのアドレスを返す。
【参照】
SectGRgn(), DiffGRgn(), XorGRgn()
【形式】
GRGN* SectGRgn(GRGN *rgn1, GRGN *rgn2)
【パラメータ】
GRGN *rgn1, *rgn2 計算対象の領域
【リターン値】
≠ NULL 計算結果の GRGN 領域へのポインタ
= NULL エラー
【解説】
2 個の GRGN
領域の共通部分に相当する領域を計算し、
それを格納したメモリのアドレスを返す。
共通部分がない場合は、
空の領域に相当する GRGN
領域を作成し、
そのアドレスを返す。
【参照】
UnionGRgn(), DiffGRgn(), XorGRgn()
【形式】
GRGN* DiffGRgn(GRGN *rgn1, GRGN *rgn2)
【パラメータ】
GRGN *rgn1, *rgn2 計算対象の領域
【リターン値】
≠ NULL 計算結果のGRGN領域へのポインタ
= NULL エラー
【解説】
rgn1
の指す GRGN
領域から
rgn2
の指す GRGN
領域を取り除いた残りの部分を求め、
それを格納した領域へのポインタを返す。
【参照】
UnionGRgn(), SectGRgn(), XorGRgn()
【形式】
GRGN* XorGRgn(GRGN *rgn1, GRGN *rgn2)
【パラメータ】
GRGN *rgn1, *rgn2 計算対象の領域
【リターン値】
≠ NULL 計算結果のGRGN領域へのポインタ
= NULL エラー
【解説】
2 個の GRGN
領域のどちらか片方だけに含まれるような領域を計算し、
それを格納した領域へのポインタを返す。
【参照】
UnionGRgn(), SectGRgn(), DiffGRgn()
【形式】
GRGN* PolyToGRgn(POLY *poly)
【パラメータ】
POLY *poly 変換対象の多角形
【リターン値】
≠ NULL 変換結果の GRGN 領域へのポインタ
= NULL エラー
【解説】
p
で指定した POLYGON
の領域を
GRGN
に変換し、
そのポインタを関数値として戻す。
戻された GRGN
は不要になった場合、
DisposeGRgn(GRGN *rgn)
で開放する必要がある。
角の丸めパラメータは無視される。
【参照】
【形式】
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 に対応している。
【参照】
【形式】
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 領域に格納され、
元のデータはそのまま残っている。
【参照】
【形式】
GRGN* RotateGRgn(GRGN *rgn, DEG ang)
【パラメータ】
GRGN *rgn 変換対象の領域
DEG ang 角度 (単位:度)
【リターン値】
≠ NULL 回転した結果の領域。
= NULL 変形できなかった
【解説】
rgn
で指定した領域を ang
で指定した角度だけ回転する。
結果は、新たに獲得した GRGN
領域にコピーされ、
その領域へのアドレスが返る。
ang
は、0、90、180、270のいずれかでなければならない。
【参照】
【形式】
W SizeGRgn(GRGN *rgn)
【パラメータ】
GRGN *rgn サイズを調べる GRGN 領域へのポインタ
【リターン値】
> 0 サイズ
【解説】
rgn
で指定した領域を保存するために必要なメモリサイズを戻す。
【参照】
この章の目次にもどる
前頁:1.20 queue.h
にもどる
次頁:1.22 inner.h
にすすむ