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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0317
kanahiron【HSP3Dish Android】モジュールの中でファイルを読み込めない2未解決


kanahiron

リンク

2015/3/17(Tue) 01:59:09|NO.67948

他のスレッドで画像サイズを取得する方法が検討されていましたが、
http://www.tvg.ne.jp/menyukko/cauldron/hmimage.html
衣日和さんの「ImageFileModule」を改造してdishで使えるようにならないかと考えていました

前にdish用としてただ必要な部分を切り出したもので試したのですが、出来なくて諦めていました
今回真面目に検証したらモジュール内で読み込んだファイルが正常に読めていないことがわかりました

読み込めていないのか、それともpeek系、getstrなどが使えないだけなのかは検証していません

検証に使ったファイルになどはzipにまとめました
詳細も中のファイルに書いています
https://drive.google.com/file/d/0BxC9-Nilt2alazJtVk5ZSzZLSGc/view?usp=sharing

あと関係無いですが、

#include "HSP3Dish.as" setreq SYSREQ_CLSMODE,0 setreq SYSREQ_CLSCOLOR,0xFFFFFF font "",50 redraw 0 color 255,255,255 boxf color pos 0,0 mes "大きい" mesy = ginfo(15) redraw 1 buffer 1,512,512 gsel 0 redraw 0 pos 0,mesy mes "小さくなっちゃった" redraw 1 stop
フォントのサイズはbufferなどを挟むと初期化されるのですね



この記事に返信する


kanahiron

リンク

2015/3/17(Tue) 02:29:50|NO.67949

追記です
HSP3.4かそれ以前のdishでは、「ImageFileModule_dish.as」をインクルードしてAndroid用にビルドしたapkはインストール出来ても起動できません



kanahiron

リンク

2015/3/17(Tue) 19:48:22|NO.67954

すみません 勘違いしていました
ImageFileModule_dishの中を以下に変えたらAndroid実機でも正常にサイズが取得出来ました

#module ImageFileModule_dish /* #deffunc _ImgF_LoadAndSigCheck str n, array d, var l ;ファイルのフォーマットチェック&メモリにロード exist n l = strsize if l < 0{ l = 0 return 0 ;げげげ } sdim d, l+1 bload n, d, l ;読み込み if wpeek(d, 0) = $00004D42 : return 1 ;BITMAP $42='B' , $4D='M' if wpeek(d, 0) = $0000D8FF : return 2 ;JPEG $FF , $D8 if lpeek(d, 0) = $38464947 : return 3 ;GIF $47='G' , $49='I' , $46='F' , $38='8' if (lpeek(d, 0) = $474E5089) & (lpeek(d, 4) = $0A1A0A0D) : return 4 ;PNG ;$89 , $50='P' , $4E='N' , $47='G' , $0D , $0A , $1A , $0A return 0 ;*/ #deffunc ImgF_GetPicSize str n, var x, var y, local b dim ib,10 ;フォーマットのタイプとデータ総量を代ニューする。 exist n l = strsize if l < 0{ l = 0 return 0 ;げげげ } ib(1) = l sdim b, l+1 bload n, b, l ;読み込み if wpeek(b, 0) = $00004D42 : ib(0) = 1 ;BITMAP $42='B' , $4D='M' if wpeek(b, 0) = $0000D8FF : ib(0) = 2 ;JPEG $FF , $D8 if lpeek(b, 0) = $38464947 : ib(0) = 3 ;GIF $47='G' , $49='I' , $46='F' , $38='8' if (lpeek(b, 0) = $474E5089) & (lpeek(b, 4) = $0A1A0A0D) : ib(0) = 4 x = 0 : y = 0 ;とりあえずぬるぽ。…じゃなくて0を代入 if ib == 1 { if lpeek(b, 14) == 40 : x = lpeek(b, 18) : y =lpeek(b, 22) ;Windows形式 } if ib == 2 { ib(2) = 2 ;offset repeat if ib(1) <= ib(2) : break ;アプリクラッシャー(破損ファイル)対策 if peek(b, ib(2)) != $FF { ;Nikonクラッシャー対策 ib(2) ++ ;nicoD700nicoのバグ(仕様?)でアプリが堕ちたょ...回避策 continue ;Markerらしきところまでスキップ } ib(3) = peek(b, ib(2) + 1) if ib(3) == $D9 : break ;ファイル終了のお知らせ if ib(3) == $C0 | ib(3) == $C2 { ;目的地発見(ハフマンのベースラインかプログレッシブのMarker) ib(4) = wpeek(b, ib(2) + 7), wpeek(b, ib(2) + 5) ;トラップ発動(高さが先) x = (ib(4) >> 8 & $00FF) | (ib(4) << 8 & $FF00) y = (ib(5) >> 8 & $00FF) | (ib(5) << 8 & $FF00) break } ib(4) = wpeek(b, ib(2) + 2) ;それ以外の何かの場合 ib(5) = (ib(4) >> 8 & $00FF) | (ib(4) << 8 & $FF00) ib(2) += ib(5) + 2 loop } if ib == 3 : x = wpeek(b, 6) : y = wpeek(b, 8) if ib == 4 { if lpeek(b, 12) == $52444849 { ;$49='I' , $48='H' , $44='D' , $52='R' IHDR(ヘッダー)であってしかるべき ib(2) = lpeek(b, 16), lpeek(b, 20) ;ビッグエンディアンだなんてorz... x = (ib(2) >> 24 & $FF) | (ib(2) >> 8 & $FF00) | (ib(2) << 8 & $FF0000) | (ib(2) << 24 & $FF000000) y = (ib(3) >> 24 & $FF) | (ib(3) >> 8 & $FF00) | (ib(3) << 8 & $FF0000) | (ib(3) << 24 & $FF000000) } } return ib /* #defcfunc ImgF_GetFormat str n, local b _ImgF_LoadAndSigCheck n, b, ib return stat ;*/ #global
モジュール内でファイルが読めないのではなく、
引数として渡した変数に目的のデータが入っていなかった、が正しいようです

#deffuncの変数の指定などにバグがありそうです



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