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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0816
ham配列変数に異なる形(int、double、strなど)を代入したい2解決


ham

リンク

2019/8/16(Fri) 10:54:00|NO.88074

apng.dllというdllを使用してアニメーションPNGファイルの情報を漏れなく読み取りたいのですが、
構造体がない(?)HSPでどうやって受け取れば良いのか分からず困っています。
このdllに限った話ではなくです。



まずはヘッダーから情報を取得しようと試みているんですが、
配列に異なる形(int、double、str)が代入されようとしていて(?)

dim命令で作った配列ではintのみしか受け取れません。
そもそも正常に受け取る方法ってありますでしょうか?

dim header,11
apng_get_header buf,byte,header

↑を試すと、解像度やフレーム数などのint型のみ代入されて他は0か変な数値になりました。


代入されようとしている(?)情報は以下の通りです。

typedef struct { apng_COLOR trans_, // 透過色 apng_COLOR background_, // 背景色 double gamma_, // ガンマ値 unsigned int width_, // APNGの幅 unsigned int height_, // APNGの高さ unsigned int num_frames_, // APNGに含まれるフレーム数 unsigned int num_plays_, // 再生回数 unsigned char bit_depth_, // 1 チャンネル辺りのビット深度 unsigned char color_type_, // カラータイプ unsigned char channels_, // 1 ピクセル辺りのチャンネル数 unsigned char valid_flags_ // フラグ } apng_HEADER;


仕様書
https://www.dropbox.com/s/uel8osz4f2gyhri/api.html?dl=0



この記事に返信する


いののて

リンク

2019/8/16(Fri) 13:54:48|NO.88078

構造体はsdimを使ってサイズ分確保して、メンバの値の取得にはpeek系関数やgetstr命令、dupptr命令を使います。


//各メンバのオフセット #define apng_HEADER_trans_index 0 #define apng_HEADER_trans_red 2 #define apng_HEADER_trans_green 4 #define apng_HEADER_trans_blue 6 #define apng_HEADER_background_index 8 #define apng_HEADER_background_red 10 #define apng_HEADER_background_green 12 #define apng_HEADER_background_blue 14 #define apng_HEADER_gamma 16 #define apng_HEADER_width 24 #define apng_HEADER_height 28 #define apng_HEADER_num_frames 32 #define apng_HEADER_num_plays 36 #define apng_HEADER_bit_depth 40 #define apng_HEADER_color_type 42 #define apng_HEADER_channels 46 #define apng_HEADER_valid_flags 48 #define apng_HEADER_SIZE 50 sdim header, apng_HEADER_SIZE //sdimで構造体のサイズ分メモリを確保 apng_get_header buf,byte,header //値を得る // int→lpeek()/short→wpeek()/char→peek()/double→dupptr/char[]→getstr mes lpeek(header, apng_HEADER_width) mes lpeek(header, apng_HEADER_height) dupptr gamma_, varptr(header)+apng_HEADER_gamma, 8, vartype("double") mes gamma_



ham

リンク

2019/8/16(Fri) 14:33:51|NO.88079

いののて様、ご回答ありがとうざいます!

なるほど・・・sdimに格納できるのですね。
そして取り出すにはpeek系やらdupptrですか!!

今の私には未知の命令ですが、形ごとに何を使えばいいか
ご丁寧に教えて下さったので、ちゃんと情報を取得できました^^b

重ねて感謝致します。m(__)m



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