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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0330
缶詰picloadで、いつまでたってもわけのわからないエラーが発生します。なぜですか?14解決


缶詰

リンク

2017/3/30(Thu) 22:26:02|NO.78736

タイトルの状況を詳しく説明しますと、最初にpicloadで大量(50枚くらい)の画像を
読み込むプログラムを組んでいるんですが、picload命令のファイル名、拡張子、
対象フォルダはすべて正しいはずです。なのに、コンパイル時に「画像がありません。」
と返されるのです。
最後にはexeファイルにして、packfileから画像を読み込むので、celloadを使用する
わけにはいきません。
いつまでたってもわからないのでここで聞いてみることにしました。
そうなる理由と解決方法を教えていただきたいです。



この記事に返信する


わた雲

リンク

2017/3/30(Thu) 23:09:36|NO.78739

celloadでも、#packによって実行ファイルに取り込んだ画像を読み込むことは可能です。

「画像がありません」と表示される原因はわかりませんが、画像を10枚ずつとかで小分けにロードして確認し、
どのpicloadでエラーが出ているのかが割り出せれば原因がわかるのではないかとおもいます。



掘木

リンク

2017/3/31(Fri) 00:31:33|NO.78751

過去ログは見てみましたか?
http://hsp.tv/play/pforum.php?mode=pastwch&num=4290

ファイル名、拡張子、対象フォルダがあっているのは分かるが、
その名前を示す文字列は12文字以内に収まっています?
(8-3ネームが前提の扱いで、相対パス/ファイル名/拡張子合わせて12文字までだった記憶)

…なーんでこんな仕様なんでしょうねえ。



缶詰

リンク

2017/3/31(Fri) 10:09:23|NO.78766

celloadでもpackfileから画像ファイルを取り出せるんですね!
それは失礼しました。私の調査不足なだけに、全く知りませんでした。

で、エラーの話に戻りますが、エラーが発生したpicloadは特定されています。
44回目のpicloadです。行番号は97番です。読み込む画像の大きさは480×480ピクセルです。
仮想画面もそれに合わせたサイズになっています。
現段階ではプログラムはまだ序の口なので、画像ファイルの文字数も気にすることもないと
思っています。(後で修正します)
できれば今後の開発のためにも理由を知っておきたいのですが、わかりますか?



わた雲

リンク

2017/3/31(Fri) 11:01:33|NO.78767

考えられる原因としては、

・picloadに対応していない拡張子である ・ファイルパスが長すぎる(画像のある階層が深すぎる)
などですね。

picloadに対応している拡張子は
BMP、JPEG、CUR、ICO、GIF、PDFなどであり、
PNG、MAGなどは対象外です。

また、Windowsの仕様でファイルパスの長さには制限があり、それを超えるとエラーが表示されるようです。



MillkeySoftware

リンク

2017/3/31(Fri) 11:51:43|NO.78768

picload と書かれている命令をコメントアウトして mes として見える形にすればいいんじゃないかなー。



缶詰

リンク

2017/3/31(Fri) 16:55:58|NO.78773

実はわた雲さんがあげていただいた原因のどちらにも当てはまっていないと思います。
画像ファイルはすべてjpgですし、深い階層というほど深くにはありません。
Dドライブの中のドキュメントというフォルダにすべての画像が入っています。
もちろん今回話題になっている44回目のpicloadで読み込む画像もそこです。
ちなみにドキュメントに入っているので、ファイル名さえ指定すれば読み込むはずです。



法貴優雅

リンク

2017/3/31(Fri) 19:03:08|NO.78774

デバッグは地道に細かく切り分けていくしかないと思います。

たとえば、その44回目に読み込む画像を最初に読み込んでエラーが出るかどうかとか。
あとは、大量の画像を読み込んでいるっぽいので、タスクマネージャーを起動しつつ
消費されていくメモリがパソコンのメモリを食いつぶしてないかとか。



ZAP

リンク

2017/3/31(Fri) 19:08:04|NO.78775

エラーが出る件の画像1枚だけを読み込む最小限のプログラムを作ってみては。

それで読み込めるのであれば、画像そのものには原因がないので
プログラムの組み方に問題があることになりますね。

他の方もおっしゃっていますが、デバッグは細かく切り分けて
原因を絞り込んでいくことが大事です。



缶詰

リンク

2017/3/31(Fri) 19:55:01|NO.78776

法貴優雅さん、ZAPさん、いい考えですね!

まず、問題のpicloadを単体で行ってみましたが、やはり「画像がありません。」と
返されます。

次に、ソースコードを元に戻してタスクマネージャーでメモリを確認したところ、
32.7MBとエクスプローラー(アプリ)に並ぶほどでしたが、パソコンのメモリ上では
1%ほどしか食っていませんでした。

そのあと、CPUの使用率を見てみたら、ほかのアプリと比べて少し高い感じですが
差が1〜2%ほどなので問題ないかと思います。

そういえば、このプログラムを組む時に44回目より前のpicloadでも同じ事例が
発生しました。16回目のpicloadです。
その際はいろいろとググって調べたんですけど、
「ファイルパスの長さは260バイトの制限があります。」という文章を
「画像ファイルの容量が260キロバイトを超えたらだめなんだ!」と勘違いし、
300キロバイトを超えていた画像ファイルを捨て、別の画像にしたらできました。

このことから画像自体に問題があるのではと考えています。

長文すみません。



スペース

リンク

2017/3/31(Fri) 20:11:58|NO.78777

existでファイルサイズを確認してみては?
-1ならファイルのパスが間違ってる、それ以外なら画像そのものに問題がある。



沢渡

リンク

2017/3/31(Fri) 21:24:42|NO.78778

もしかしてですが、jpgではない画像ファイル(pngとかgifとか)が、拡張子だけjpgに変わっていたりはしませんか?
試しにpngファイルをjpgに変えて読んでみたら、やはり「画像ファイルがありません」エラーになりました。

このような「拡張子だけjpgのjpgではないファイル」は、画像ビューワーやグラフィックツール、ブラウザ等では、
特にエラーも吐かずに正常に表示できてしまうことが多いようです。
(GIMPやChrome、Windows10付属の「フォト」や「ペイント」では正常に読めてしまいました)
問題の画像を一旦グラフィックツールで読んだあと、改めてjpgに出力し直してみてはどうでしょうか?



缶詰

リンク

2017/3/31(Fri) 21:46:15|NO.78779

!?

なるほど!実は50個の画像全部ダウンロードしたものですけど、問題の画像をググったら、
両方、pngで保存してこようとします!そこを無理やり拡張子を変えたから
読み込めなかったんですね!ありがとうございます!
これで解決です!わた雲さん、堀木さん、MillkeySoftwareさん、法貴優雅さん、ZAPさん、
スペースさん、沢渡さん、コメントありがとうございました!



jsAster

リンク

2017/4/1(Sat) 09:00:46|NO.78783

PNGは対応してたような・・・・。



MillkeySoftware

リンク

2017/4/1(Sat) 10:48:18|NO.78784

解決済みですがバグの原因となるため、注意事項を書いておきます。
画像の読み込み(picload)は、拡張子によって内部で読み込み処理を変えています。

その為、無理やり拡張子を変えると正しく読み込めないファイルが発生しますのでご注意ください。

[下記内部処理方法]
.png / .psd / .tga = stbi_load_from_memory
.bmp / .gif / .jpg / .ico = OleLoadPicture



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