| 
 | 
 
 
 
 
 |  | 
2018/3/3(Sat) 22:50:45|NO.82613 
もともと透過情報を持っているpng画像の透過のさせ方がよくわかりません。一応調べたのですがうまくいきませんでしたどなたか教えてください。
 
 | 
 
 
 
 |  | 
2018/3/4(Sun) 00:30:45|NO.82614 
HSP標準命令では透過情報は無視されます。
 ただほとんど使ったことが無いのでうろ覚えですが
 Artlet2Dで透過情報持ちの画像を使うことが出来たような気がします。
 
 もしくは透過PNG対応のプラグイン利用ですかね。
 
 | 
 
 
 |  | 
2018/3/4(Sun) 04:40:27|NO.82615 
標準命令の場合はpicload でモード1を指定した時だけ有効 
picloadなのでgcopyのような一部だけ表示とかは出来ない
 color 0,60,60
boxf
pos 50,16
picload dir_exe+"\\hsptv\\hsptv_img.png",1
 
描画速度が必要な場合はhgimg系やhsp3dish等を使う 
HSPに付属されてない物でもDirectX系のプラグインで透過PNG使えるのはあったと思う
 | 
 
 
 |  | 
2018/3/6(Tue) 19:00:00|NO.82642 
返信が遅れて申し訳ありません。picload1を試してみたらできました。有難うございます。ただpicload1だとループさせると透過できなくなっていく、gcopyだと縁が透過されない問題が
 発生しました。これに解決法は有るのでしょうか?
 
 | 
 
 
 |  | 
2018/3/6(Tue) 19:58:42|NO.82645 
>ただpicload1だとループさせると透過できなくなっていく
半透明で重ね塗りしてるようなものなので 
背景が書き換わってないのに再度読み込むとそうなる
 
あと、picloadのpngアルファ値再現は少しおかしくて 
本来透明な部分も重ね塗りされる事で黒くなってしまう 
(完全な透明に出来てない)
 repeat
	redraw 0
	color 0,60,60
	boxf
	pos 200,200
	picload dir_exe+"\\hsptv\\king_knight.png",1
	redraw 1
	await 16
loop
 
毎回背景も書き換えれば良い
 | 
 
 
 |  | 
2018/3/6(Tue) 23:34:16|NO.82651 
gcopyを使われるのでしたら gmode 7 を活用する方法があります。 
前処理として透過情報を gmode 7 対応に分離する処理が必要ですが、手軽にできるツールがあるので試してみてはいかがでしょうか。
 
PixelA メーカー
http://mclab.uunyan.com/dl/dl34.htm 
他の方も同じようなツールを作られている方がいるので使いやすい方を選んでください。
> gcopyだと縁が透過されない問題が 
gmode 2か4で使用していませんか? 
2と4が透明にできるのは1色のみです。
 | 
 
 
 |  | 
2018/3/7(Wed) 00:04:32|NO.82654 
>>暇人さん有難うございました。表示ができました。
 
 | 
 
 
 |  | 
2018/3/7(Wed) 19:27:11|NO.82665 
↓にgmode7用の画像をbufferに作るモジュールを書いたけどバグがあったのでhttp://hsp.tv/play/pforum.php?mode=pastwch&num=57945 
修正したのを↓に
 #include "a2d.hsp"
//必ず#include "a2d.hsp"の後に挿入
#module
//アルファ値付き画像をgmode7で使えるようにidで指定したバッファへ指定サイズ毎に画像を左、アルファ値(グレースケール)を右にして全て縦に並べる
//gmode7picload fname, id, sizex, sizey
//	fname "ファイルネーム"
//	id = 読み込むHSPバッファID
//	sizex = 画像が複数キャラからを含んでる時に1キャラのXサイズ(celdivにも設定される)[省略か0の場合画像サイズが使われる]
//	sizey = 画像が複数キャラからを含んでる時に1キャラのYサイズ(celdivにも設定される)[省略か0の場合画像サイズが使われる]
//	cpx = celput時の中心X座標
//	cpy = celput時の中心Y座標
//statに分割数が返る(celput用の分割数では無い)
//celputを使用する時の分割画像Noは 0からの偶数 を使用してください
//読み込んだ画像のサイズを知りたいときはalGetWidth()、alGetHeight()を使用
#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 {_sizey=alGetHeight()}else{_sizey=sizey}
	divx=(alGetWidth()/_sizex)
	divy=(alGetHeight()/_sizey)
	buffer id,_sizex*2,divx*divy*_sizey
	color
	boxf
	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
//モジュールここまで
p_id=1
gmode7picload dir_exe+"\\hsptv\\king_knight.png",p_id,64
title "読み込んだ画像サイズ X="+alGetWidth()+"  Y="+alGetHeight()
repeat
	redraw 0
	color 0,60,60
	boxf
	pos 200,200
	gmode 7	//gmode7picload内でceldivの設定をしてるのでcelputで描画するならコピーサイズを指定する必要は無い
	celput p_id,0
	
	pos 350,200
	celput p_id,2
	
	redraw 1
	await 16
loop
 
直接picloadで描画した時みたいなアルファ値再現がおかしいのは無くなるし 
速度的にもpicloadよりは良いと思う
|  
 |  | 
 
 
 |  | 
2018/3/9(Fri) 07:21:26|NO.82685 
>alCopyImageToScreen 99, id, 0, _sizey*cnt, _sizex,_sizey,_sizex*(cnt\divx),_sizey*(cnt/divx)	//通常の画像を縦に並べてコピー完全透明ならいいけどこれだと左側の画像はアルファチャネルが適用されて半透明の部分は背景と混ざると思うけど
 こんな感じであらかじめアルファチャネル無効にしとかないと
 cmatrix(MAT_R) = 1.0, 0.0, 0.0, 0.0, 0.0
 cmatrix(MAT_G) = 0.0, 1.0, 0.0, 0.0, 0.0
 cmatrix(MAT_B) = 0.0, 0.0, 1.0, 0.0, 0.0
 cmatrix(MAT_A) = 0.0, 0.0, 0.0, 0.0, 1.0
 
 | 
 
 
 |  | 
2018/3/9(Fri) 19:20:19|NO.82689 
あ、そう言えばそうですね 
gmode7用の右側の画像がα値適用された画像になってしまってた・・・ 
修正版↓
 //必ず#include "a2d.hsp"の後に挿入
#module
//アルファ値付き画像をgmode7で使えるようにidで指定したバッファへ指定サイズ毎に画像を左、アルファ値(グレースケール)を右にして全て縦に並べる
//gmode7picload fname, id, sizex, sizey
//	fname "ファイルネーム"
//	id = 読み込むHSPバッファID
//	sizex = 画像が複数キャラからを含んでる時に1キャラのXサイズ(celdivにも設定される)[省略か0の場合画像サイズが使われる]
//	sizey = 画像が複数キャラからを含んでる時に1キャラのYサイズ(celdivにも設定される)[省略か0の場合画像サイズが使われる]
//	cpx = celput時の中心X座標
//	cpy = celput時の中心Y座標
//statに分割数が返る(celput用の分割数では無い)
//celputを使用する時の分割画像Noは 0からの偶数 を使用してください
//読み込んだ画像のサイズを知りたいときはalGetWidth()、alGetHeight()を使用
#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 {_sizey=alGetHeight()}else{_sizey=sizey}
	divx=(alGetWidth()/_sizex)
	divy=(alGetHeight()/_sizey)
	buffer id,_sizex*2,divx*divy*_sizey
	cmatrix(MAT_R) = 1.0, 0.0, 0.0, 0.0, 0.0
	cmatrix(MAT_G) = 0.0, 1.0, 0.0, 0.0, 0.0
	cmatrix(MAT_B) = 0.0, 0.0, 1.0, 0.0, 0.0
	cmatrix(MAT_A) = 0.0, 0.0, 0.0, 0.0, 1.0
	alCopyModeColorMatrix cmatrix
	repeat divx*divy
		alCopyImageToScreen 99, id, 0, _sizey*cnt, _sizex,_sizey,_sizex*(cnt\divx),_sizey*(cnt/divx)	//通常の画像を縦に並べてコピー
	loop
	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	//アルファチャネルをグレースケールに変換設定
	repeat divx*divy
		alCopyImageToScreen 99, id, _sizex, _sizey*cnt, _sizex,_sizey,_sizex*(cnt\divx),_sizey*(cnt/divx)	//グレースケールを通常画像の右に縦に並べてコピー
	loop
	alResetCopyMode	//一応変換設定を元に戻しとく
	celdiv id,_sizex,_sizey,cpx,cpy
	gsel gsel_bak
return divx*divy
#global
|  
 |  | 
 
 
 |