〜 グラフィック 〜
画像の上下左右を反転

gzoom命令は画像の拡大・縮小コピーする際に用いるものですが、
サイズにマイナス値を指定することで反転させることも出来るようになっています。
反転コピーすると、反転サイズ分だけズレてしまうので、
指定した基点を左上としてコピーするにはその分だけズラす必要があり、少しわかりにくくなります。
下記のサンプルは、gzoom命令に反転方向用パラメータを加えて、
プラス値で指定するようにしたモジュール命令です。
	

gzoom2 貼付幅, 貼付高さ, 読込先バッファ, X座標, Y座標, 横幅, 高さ, 方向
貼付幅変倍させた横サイズを指定する(元のサイズと同一値で等倍)
貼付高さ変倍させた縦サイズを指定する(元のサイズと同一値で等倍)
読込先バッファコピーするウィンドウIDを指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点Y座標指定する
横幅コピーする画像の横サイズを指定する
高さコピーする画像の縦サイズを指定する
方向反転方向を指定する(0:反転なし 1:左右反転 2:上下反転 3:上下左右反転)

 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 gzoom2 int, int, int, int, int, int, int, int
	mref zx, 0 : mref zy, 1 : mref id, 2 : mref bx, 3 : mref by, 4 : mref sx, 5 : mref sy, 6 : mref direction, 7
	cx = csrx : cy = csry
	if direction = 0 : pos csrx, csry : gzoom zx, zy, id, bx, by, sx, sy
	if direction = 1 : pos csrx + zx - 1, csry : gzoom -zx, zy, id, bx, by, sx, sy
	if direction = 2 : pos csrx, csry + zy - 1 : gzoom zx, -zy, id, bx, by, sx, sy
	if direction = 3 : pos csrx + zx - 1, csry + zy - 1 : gzoom -zx, -zy, id, bx, by, sx, sy
	pos csrx, csry // カレントポジションを戻す
	return
#global

	buffer 2
	picload "sample/ssaver/Aruface.bmp"
	gsel 0
	redraw 0
	pos 150,  50 : mes "ノーマル"
	pos 150,  80 : gzoom2 80, 80, 2, , , 80, 80
	pos 350,  50 : mes "左右反転"
	pos 350,  80 : gzoom2 80, 80, 2, , , 80, 80, 1
	pos 150, 200 : mes "上下反転"
	pos 150, 230 : gzoom2 80, 80, 2, , , 80, 80, 2
	pos 350, 200 : mes "上下左右反転"
	pos 350, 230 : gzoom2 80, 80, 2, , , 80, 80, 3
	redraw 1
	stop

gzoom2 貼付幅, 貼付高さ, 読込先バッファ, X座標, Y座標, 横幅, 高さ, 方向
貼付幅変倍させた横サイズを指定する(元のサイズと同一値で等倍)
貼付高さ変倍させた縦サイズを指定する(元のサイズと同一値で等倍)
読込先バッファコピーするウィンドウIDを指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点Y座標指定する
横幅コピーする画像の横サイズを指定する
高さコピーする画像の縦サイズを指定する
方向反転方向を指定する(0:反転なし 1:左右反転 2:上下反転 3:上下左右反転)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#module
#deffunc gzoom2 int zx, int zy, int id, int bx, int by, int sx, int sy, int dir, local cx, local cy
	cx = ginfo_cx : cy = ginfo_cy
	if dir = 0 : pos cx, cy : gzoom zx, zy, id, bx, by, sx, sy
	if dir = 1 : pos cx + zx - 1, cy : gzoom -zx, zy, id, bx, by, sx, sy
	if dir = 2 : pos cx, cy + zy - 1 : gzoom zx, -zy, id, bx, by, sx, sy
	if dir = 3 : pos cx + zx - 1, cy + zy - 1 : gzoom -zx, -zy, id, bx, by, sx, sy
	pos cx, cy // カレントポジションを戻す
	return
#global

	buffer 2
	picload "sample/demo/onibtn.gif"
	gsel 0
	redraw 0
	pos 150,  50 : mes "ノーマル"
	pos 150,  80 : gzoom2 136, 50, 2, , , 136, 50
	pos 350,  50 : mes "左右反転"
	pos 350,  80 : gzoom2 136, 50, 2, , , 136, 50, 1
	pos 150, 200 : mes "上下反転"
	pos 150, 230 : gzoom2 136, 50, 2, , , 136, 50, 2
	pos 350, 200 : mes "上下左右反転"
	pos 350, 230 : gzoom2 136, 50, 2, , , 136, 50, 3
	redraw 1