画像ファイルで用意してる物に対してなら
・α値付きPNGファイルにする
・gmode 7用のピクセルアルファブレンド用画像にする
・画像を読み込んでからgmode 7用の画像を作る
画像を読み込んでからgmode 7用の画像を作る方法
#module "mod_SetRGBAMask"
#define global samtempid 321
//現在の操作先ウィンドウバッファの画像にピクセルアルファブレンド用画像を付け加えた画像を作りそのバッファIDを返す
//SetRGBAMask col, colcnt, id
//col =カラーキー配列(配列=R,G,B,A の順番で一つのカラーキーになる)、RGBは0〜255、Aは0〜256(0で透明、256が完全不透明)
//colcnt =カラーキーの数
//id =バッファID(省略時は-1)、-1の時は未使用のウィンドウバッファIDが使われる
//statにgmode 7用のアルファマスク含む画像のバッファIDが返る
#define global SetRGBAMask(%1,%2=1,%3=-1) _SetRGBAMask %1,%2,%3
#deffunc _SetRGBAMask array col,int colcnt,int id
xsiz=ginfo_sx
ysiz=ginfo_sy
gid=ginfo_sel
buffer samtempid,xsiz,ysiz
if id<0{_id=ginfo(25)}else{_id=id}
buffer _id,xsiz*2,ysiz
repeat colcnt
color 255,255,255
boxf 0,0,xsiz,ysiz
color col(cnt*4),col(cnt*4+1),col(cnt*4+2)
gmode 4,xsiz,ysiz,256 //透明色付き半透明
pos 0,0
gcopy gid //白背景(_id)に指定色を抜いた画像をコピー
gsel samtempid
color
boxf
color col(cnt*4),col(cnt*4+1),col(cnt*4+2)
pos 0,0
gmode 4,xsiz,ysiz,256 //透明色付き半透明
gcopy gid //黒背景(samtempid)に指定色を抜いた画像をコピー
gsel _id
pos 0,0
gmode 6,xsiz,ysiz,256 //色減算(100%)
gcopy samtempid //白背景にコピーした画像に対して黒背景にコピーした画像を色減算コピー(色抜きされた部分の白背景だけが残る)
gmode 6,xsiz,ysiz,256-col(cnt*4+3) //色減算(指定α値)
pos xsiz,0
gcopy _id //白背景(_idの右側半分)に色減算コピー(上で残った白い部分だけ色減算コピーされる)
loop
gmode 0,xsiz,ysiz
pos 0,0
gcopy gid //元画像を_idの左側に通常コピー
gsel gid
return _id
#global
gsx=640
gsy=480
screen 1,gsx,gsy
color 50,100,100
boxf 100,100,500,450
color 255,255,255
boxf 200,200,400,400
color 255
circle 150,250,300,450,1
colmax=0
col(colmax*4)=255,255,255 ,0 //白を透過
colmax++
col(colmax*4)=255,0,0 ,128 //赤を半透明
colmax++
SetRGBAMask col,colmax
id=stat
screen 0
picload dir_exe+"\\hsptv\\sozai2.jpg"
gmode 7
gcopy id,0,0,gsx,gsy
gmode 7のコピーは色減算合成コピー+色加算合成コピーをやってるのと変らないと思うから
通常コピーの数倍は重いと思っといた方が良い