〜 グラフィック 〜
分割セルの数・サイズ・中心点を取得

HSP3.2で追加された2Dセル描画命令を使用することで、
画像内にある同一サイズのチップを容易に扱えるようになります。
ただ、HSP3.2で標準命令として用意されているのはcelload命令による画像読込、
celdiv命令によるセル分割・中心座標の決定、celput命令によるセルチップの描画の3点のみです。
分割されたセルが幾つあるのか、セル幅・高さは幾らか、中心座標はどこかといった情報は、
ウィンドウ毎に保存する情報はBMSCR構造体で管理されているので、
ココから取得するモジュール命令を用意しました。
保存されている位置は、BMSCR構造体数値配列の要素83〜85番目、です。
XYそれぞれ2バイト幅で格納されているので、サンプルのように取り出してください。
	

bsel ウィンドウID
ウィンドウIDセル情報取得元のウィンドウIDを指定する

セル数 = celgetnum(方向フラグ)
セル数取得したセル数の受取先を指定する
方向フラグ数の取得する方向(0:横 1:縦 2:両方)を指定する

サイズ = celgetsize(方向フラグ)
サイズピクセル単位の取得したサイズ受取先を指定する
方向フラグサイズの取得する方向(0:X 1:Y)を指定する

座標 = celgetpos(方向フラグ)
座標左上を基点とする取得した座標受取先を指定する
方向フラグ座標を取得する方向(0:X 1:Y)を指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#module
#deffunc bsel int id
	mref bmscr, id + 96
	return

#defcfunc celgetnum int direction
	if bmscr = 0 : return 0
	if direction = 0 : return bmscr.83 & 0xFFFF
	if direction = 1 : return bmscr.83 >> 16
	return (bmscr.83 & 0xFFFF) * (bmscr.83 >> 16)

#defcfunc celgetsize int direction
	if bmscr = 0 : return 0
	if direction : return bmscr.84 >> 16 : else : return bmscr.84 & 0xFFFF

#defcfunc celgetpos int direction
	if bmscr = 0 : return 0
	if direction : return bmscr.85 >> 16 : else : return bmscr.85 & 0xFFFF
#global

	celload "hsptv/prog4/box_contest.bmp", 1
	celdiv 1, 64, 64, 32, 32
	bsel 1 // セル情報取得ウィンドウを取得前に指定しておく
	mes "セル数は横" + celgetnum() + "×縦" + celgetnum(1) + "=計" + celgetnum(2) + "個"
	mes "セルサイズは" + celgetsize() + "×" + celgetsize(1) + "ピクセル"
	mes "セル中心座標は(" + celgetpos() + ", " + celgetpos(1) + ")"