〜 グラフィック 〜
画像を四角以外の形で貼り付け

画像を四角形(長方形・正方形)にコピーすることはgcopy命令・gzoom命令で行えますが、
その他の円形や四角形以外の三角形や五角形、星型にコピーする命令は用意されていません。
しかし、これは標準命令だけで行えないというわけではありません。
サンプルではフォント使用と指定色のみを透過させることで実現させています。
そのため文字にない形には切り取ることが出来ませんし、全角1文字(2バイト分)までが有効サイズですので、
全角1文字を超える文字列(Ex.あいうえお)の形にはコピーできませんが、
3バイト以上の複数文字列部分をコピー領域とする場合は、
モジュールではありませんがコチラのやり方でテキスト部分だけに画像を貼り付けられます。
	

gcopy2 キャラクタ, 読込先バッファ, 作業バッファ, X座標, Y座標, サイズ
キャラクタコピーする形を指定する(全角1文字分まで)
読込先バッファコピーするウィンドウIDを指定する
作業バッファ一時作業用に使用する「現在使用されていないウィンドウID」を指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点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
27
28
29
30
31
32
33
34
35
#module
#deffunc gcopy2 str, int, int, int, int, int
	mref char, 32 : mref copywin, 1 : mref tempwin, 2 : mref left, 3 : mref top, 4 : mref size, 5
	mref bmscr, 67
	actwin = bmscr.18 // コピー先(アクティブ)ウィンドウを保持
	cx = csrx : cy = csry
	buffer tempwin, size, size * 2
	pos 0, 0 : gcopy actwin, cx, cy, size, size
	pos 0, size : gcopy copywin, left, top, size, size
	font "MS ゴシック", size, 1
	pos 0, 0 : mes char
	gmode 2
	pos 0, size : gcopy tempwin, , , size, size
	gsel actwin
	pos cx, cy : gcopy tempwin, , size, size, size
	return
#global

	buffer 2
	picload "sample/demo/hsp2ttl.jpg"
	gsel 0
	redraw 0
	// クリアされてないかのチェック用に適当な背景を描画
	color 255 : boxf , , winx / 2, winy / 2
	color , 255 : boxf winx / 2, , winx , winy / 2
	color , , 255 : boxf , winy / 2, winx / 2, winy
	color 50, 50, 50 : boxf winx / 2, winy / 2, winx, winy
	// ID3を作業ウィンドウとしてID2画像の(400, 20)を基点に「★」型にコピー
	pos 50, 50 : gcopy2 "★", 2, 3, 400, 20, 120
	// ID3を作業ウィンドウとしてID2画像の(100, 50)を基点に「&」型にコピー
	pos 500, 200 : gcopy2 "&", 2, 3, 100, 50, 80
	// ID3を作業ウィンドウとしてID2画像の(250, 0)を基点に「◎」型にコピー
	pos 170, 170 : gcopy2 "◎", 2, 3, 250, , 300
	redraw 1
	stop

gcopy2 キャラクタ, 読込先バッファ, 作業バッファ, X座標, Y座標, サイズ
キャラクタコピーする形を指定する(全角1文字分まで)
読込先バッファコピーするウィンドウIDを指定する
作業バッファ一時作業用に使用する「現在使用されていないウィンドウID」を指定する
X座標コピーする画像の基点X座標指定する
Y座標コピーする画像の基点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
27
28
29
30
31
32
#module
#deffunc gcopy2 str char, int copywin, int tempwin, int left, int top, int size, local actwin, local cx, local cy
	actwin = ginfo_act // コピー先(アクティブ)ウィンドウを保持
	cx = ginfo_cx : cy = ginfo_cy
	buffer tempwin, size, size * 2
	pos 0, 0 : gcopy actwin, cx, cy, size, size
	pos 0, size : gcopy copywin, left, top, size, size
	font "MS ゴシック", size, 1
	pos 0, 0 : mes char
	gmode 2
	pos 0, size : gcopy tempwin, , , size, size
	gsel actwin
	pos cx, cy : gcopy tempwin, , size, size, size
	return
#global

	buffer 2
	picload "sample/peas/back.jpg"
	gsel 0
	redraw 1
	// クリアされてないかのチェック用に適当な背景を描画
	color 255 : boxf , , ginfo_winx / 2, ginfo_winy / 2
	color , 255 : boxf ginfo_winx / 2, , ginfo_winx , ginfo_winy / 2
	color , , 255 : boxf , ginfo_winy / 2, ginfo_winx / 2, ginfo_winy
	color 50, 50, 50 : boxf ginfo_winx / 2, ginfo_winy / 2, ginfo_winx, ginfo_winy
	// ID3を作業ウィンドウとしてID2画像の(400, 20)を基点に「★」型にコピー
	pos 50, 50 : gcopy2 "★", 2, 3, 400, 20, 120
	// ID3を作業ウィンドウとしてID2画像の(100, 50)を基点に「&」型にコピー
	pos 500, 200 : gcopy2 "&", 2, 3, 100, 50, 80
	// ID3を作業ウィンドウとしてID2画像の(250, 0)を基点に「◎」型にコピー
	pos 170, 170 : gcopy2 "◎", 2, 3, 250, , 300
	redraw 0