〜 グラフィック 〜
画面をグレースケール表示

画像を白黒の濃淡だけのグレースケール化をするサンプルです。
HSPには以前から、画像を256色で表示させるパレット機能というものが付いており、
パレットにない色が使われているときは、一番近いパレット色に置き換えられるという特性を利用し、
簡単にグレースケール化することができます。
また、RGBのいずれかを輝度固定にすることで、赤や緑等の濃淡だけのモノトーン表示もできます。
	

monotone ウィンドウID, 基点X, 基点Y, 横幅, 高さ
ウィンドウ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 monotone int, int, int, int, int
	mref id, 0 : mref x, 1 : mref y, 2 : mref w, 3 : mref h, 4
	ginfo 1
	buffer id, w, h, 1
	repeat 256 : palette cnt, cnt, cnt, cnt : loop
	palfade
	gcopy prmy, x, y, w, h
	gsel prmy
	pos x, y : gcopy id, , , w, h
	return
#global

	objsize winx / 2, 25
	pos winx / 2 * 0, 0 : button "画像読込", *load
	pos winx / 2 * 1, 0 : button "グレースケール化", *change
	stop

*load
	dialog "bmp;*.jpg;*.mag", 16
	if stat {
		buffer 2
		picload refstr
		i = winx, winy
		gsel 0
		pos 0, 25 : gzoom winx, winy - 25, 2, , , i, i.1
	}
	stop

*change
	monotone 2, , 25, winx, winy - 25
	stop

monotone ウィンドウID, 基点X, 基点Y, 横幅, 高さ
ウィンドウ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
#module
#deffunc monotone int id, int x, int y, int w, int h, local i
	i = ginfo_sel
	buffer id, w, h, 1
	repeat 256 : palette cnt, cnt, cnt, cnt, (cnt = 255) : loop
	gcopy i, x, y, w, h
	gsel i
	pos x, y : gcopy id, , , w, h
	return
#global

	objsize ginfo_winx / 2, 25
	pos ginfo_winx / 2 * 0, 0 : button gosub "画像読込", *load
	pos ginfo_winx / 2 * 1, 0 : button gosub "グレースケール化", *change
	stop

*load
	dialog "bmp;*.jpg;*.mag", 16
	if stat {
		buffer 2
		picload refstr
		i = ginfo_winx, ginfo_winy
		gsel 0
		pos 0, 25 : gzoom ginfo_winx, ginfo_winy - 25, 2, , , i, i.1
	}
	return

*change
	monotone 2, , 25, ginfo_winx, ginfo_winy - 25
	return