HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0402
ZAP【hgimg3】サイズ不定の複数の画像ファイルをテクスチャに登録6解決


ZAP

リンク

2017/4/2(Sun) 19:50:16|NO.78824

hgimg3でサイズが不定の複数の画像ファイルを一括でテクスチャ登録したい場合、
画像のサイズを得るためにいったんダミーのバッファに読み込み、
ginfoでサイズを得てからaddplateで登録しているのですが、
このためだけにダミーのバッファに一々読み込ませるのはどうも無駄なような気がしますし、
ストレージにも優しくないような気がします。
何かいい方法はないでしょうか?


repeat 100 ;読み込む画像データの枚数 ;画像読み込み buffer TMPBUF ;画像サイズを得るためのダミーバッファ FileName=dir_cur+"/pic/Graphic"+cnt+".png" ;画像データ名は連番 picload FileName GrpX(cnt)=ginfo(12) :GrpY(cnt)=ginfo(13) ;Xサイズ、Yサイズを取得 texload FileName addplate TexID(cnt),1,GrpX(cnt),GrpY(cnt),0,0,GrpX(cnt)-1,GrpY(cnt)-1,stat await 0 loop



この記事に返信する


ZAP

リンク

2017/4/2(Sun) 19:53:33|NO.78825

ちなみにtexload後のginfo(12)やginfo(13)が使えないかと思って数値を見てみましたが、
補正後のサイズらしく、元の画像ファイルのサイズよりも大きな数値が入っていました。



K-s

リンク

2017/4/2(Sun) 23:59:09|NO.78832

画像ファイルには幅高さが記録されているのでそれをbloadやpeekなどで読み取るのが良いと思います。
記録されている位置は「png フォーマット」などで検索して頂ければ。
bloadでその部分だけ読み込めば負荷も少なくなるかと。

あと画像の幅高さはできるだけ2の累乗サイズにした方が良いです。
texloadで読み込む際それ以外のサイズだと補正のためにbufferとpicloadが余分に実行されるので。



ZAP

リンク

2017/4/3(Mon) 00:15:42|NO.78833

>K-sさん

ありがとうございます。
利用しようと思っている画像素材が100種類を超えると思われるので
できれば配布元が提供する画像を加工せずにそのまま使わせてもらおうと
思っていたのですが、事前にすべて自分で加工して大きさを統一したほうが
いろんな意味でいいような気がしてきました。



MillkeySoftware

リンク

2017/4/3(Mon) 03:13:03|NO.78837

hgimg3 の texload モジュール抜粋

#deffunc texload str fn ; texture reg ; gsel WORKSCR picload fn winx=ginfo(12):winy=ginfo(13) px=1:repeat 12 if px>=winx : break px=px<<1:loop py=1:repeat 12 if py>=winy : break py=py<<1:loop if ( px!=winx )|( py!=winy ) { ; 2^nサイズでない時は補正 buffer WORKSCR,px,py,hgmode cls 4 picload fn,1 } settex winx,winy if stat<0 : dialog "Texture Error("+stat+")" { gsel hgsel : return } i=stat await 0 gsel hgsel return i
こんな感じになってるから、そもそも自分で picload する必要もないというか。
モジュール空間内へ自作命令を作っちゃえば良いと思いますよ。
必要なのは、winx と winy の変数なので。読み込み直後に winx と winy の内容を命令として取り出せば。



MillkeySoftware

リンク

2017/4/3(Mon) 03:29:08|NO.78838

書き換え例としてはこんな感じかの?

#deffunc texload str fn ; texture reg ; gsel WORKSCR picload fn winx=ginfo(12):winy=ginfo(13) old_winx = winx : old_winy = winy //←ここを追加 px=1:repeat 12 if px>=winx : break px=px<<1:loop py=1:repeat 12 if py>=winy : break py=py<<1:loop if ( px!=winx )|( py!=winy ) { ; 2^nサイズでない時は補正 buffer WORKSCR,px,py,hgmode cls 4 picload fn,1 } settex winx,winy if stat<0 : dialog "Texture Error("+stat+")" { gsel hgsel : return } i=stat await 0 gsel hgsel return i //下記の命令を追加 #deffunc texload_getsize var old_gwx,var old_gwy old_gwx = old_winx : old_gwy = old_winy return



ZAP

リンク

2017/4/4(Tue) 20:29:40|NO.78902

asファイルを編集するという手法は思いつきませんでした。
それにしても2の累乗でないと内部で2回picloadされてるとは初耳でした。
参考にさせていただきます。
ありがとうございました!



ONION software Copyright 1997-2023(c) All rights reserved.