alCreateImageByFileで読み込んでalCopyImageToScreenでHSPスクリーンバッファにコピー
#include "a2d.hsp"
//Artlet2DのバッファID0に透明度付き画像読み込み
alCreateImageByFile 0, dir_exe+"\\sample\\hsp3dish\\hsplogo8.png"
repeat
redraw 0
color 0,80,80
boxf
//Artlet2DのバッファID0からHSPスクリーンID0にコピー
alCopyImageToScreen 0, 0, 300, 200, 80, 50,0,50*(cnt\16)
redraw 1//表画面に反映
await 50
loop
でも結構重いから用途によっては厳しい
picload "ファイル.png",1
で表示するよりは軽いけど・・・
a2dの描画じゃ速度的に厳しい時用(加工にa2dの命令を使用)
アルファ付き画像をgmode7用に加工してHSPバッファに入れるモジュール
#include "a2d.hsp"
//必ず#include "a2d.hsp"の後に挿入
#module
//アルファ値付き画像をgmode7で使えるようにidで指定したバッファへ指定サイズ毎に画像を左、アルファ値(グレースケール)を右にして全て縦に並べる
//gmode7picload fname, id, sizex, sizey
// fname "ファイルネーム"
// id = 読み込むHSPバッファID
// sizex = 画像が複数キャラからを含んでる時に1キャラのXサイズ(celdivにも設定される)
// sizey = 画像が複数キャラからを含んでる時に1キャラのYサイズ(celdivにも設定される)
// cpx = celput時の中心X座標
// cpy = celput時の中心Y座標
//statに分割数が返る(celput用の分割数では無い)
#deffunc gmode7picload str fname,int id,int sizex,int sizey,int cpx,int cpy
gsel_bak=ginfo_sel
alCreateImageByFile 99, fname
if sizex<=0 {_sizex=alGetWidth()}else{_sizex=sizex}
if sizey<=0 {_sizex=alGetHeight()}else{_sizey=sizey}
divx=(alGetWidth()/_sizex)
divy=(alGetHeight()/_sizey)
buffer id,_sizex*2,divx*divy*_sizey
alResetCopyMode
repeat divx*divy
alCopyImageToScreen 99, id, 0, _sizey*cnt, _sizex,_sizey,_sizex*(cnt\divx),_sizey*(cnt/divx) //通常の画像を縦に並べてコピー
loop
if length(cmatrix)=1 {; アルファチャネルをグレースケールに変換設定値
cmatrix(MAT_R) = 0.0, 0.0, 0.0, 1.0, 0.0
cmatrix(MAT_G) = 0.0, 0.0, 0.0, 1.0, 0.0
cmatrix(MAT_B) = 0.0, 0.0, 0.0, 1.0, 0.0
cmatrix(MAT_A) = 0.0, 0.0, 0.0, 0.0, 1.0
}
alCopyModeColorMatrix cmatrix //アルファチャネルをグレースケールに変換設定
alCopyImageToImage 99, 99, 0,0,alGetWidth(), alGetHeight(), 0, 0 //コピー(アルファチャネルがグレースケール画像になる)
alResetCopyMode //変換設定を元に戻す
repeat divx*divy
alCopyImageToScreen 99, id, _sizex, _sizey*cnt, _sizex,_sizey,_sizex*(cnt\divx),_sizey*(cnt/divx) //グレースケールを通常画像の右に縦に並べてコピー
loop
celdiv id,sizex,sizey,cpx,cpy
gsel gsel_bak
return divx*divy
#global
//モジュールここまで
sizex=80
sizey=50
id=1
gmode7picload dir_exe+"\\sample\\hsp3dish\\hsplogo8.png",id,sizex,sizey
div=stat
repeat
redraw 0
color 200,80,80
boxf
gmode 7,sizex,sizey
pos 300, 200
gcopy id,0,sizey*(cnt\div) //縦に並んでるのでコピー元の左上Y座標を変更
pos 300, 200+sizey
celput id,(cnt\div)*2 //gmode 7用にしたバッファが透明度用に横が二倍になるので分割画像No.を2倍して指定する必要がある
redraw 1//表画面に反映
await 50
loop
gmode7のコピーでも重い場合はOpenGLやDirect3D等でハードウェアアクセラレーションを使うしかない