トップページ > 記事閲覧
LoadDivGraphとアンダースコア
名前:Saucer 日時: 2014/07/17 12:54

いつもお世話になっております。 LoadDivGraph関数にアンダースコア( _ )を使ったファイル名を 渡したらエラーが発生したのですが、原因はなんでしょうか? アンダースコアを取ると普通に動作するようです。
メンテ

Page: 1 |

Re: LoadDivGraphとアンダースコア ( No.1 )
名前:管理人 日時:2014/07/20 05:35

私の環境で関数リファレンスにある LoadDivGraph のサンプルプログラムで読み込む画像の ファイル名を test2.bmp から te_st2.bmp に変更してみましたが、エラー無く読み込むことができました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GHandle[ 10 ] ; int i ; ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // BMP画像のメモリへの分割読み込み LoadDivGraph( "test2.bmp" , 10 , 4 , 3 , 48 , 56 , GHandle ) ; // ロードしたグラフィックのアニメーション i = 0 ; // キーが押されるまでループ(キー判定には『CheckHitKeyAll』を使用) while( CheckHitKeyAll() == 0 ) { // グラフィックの描画(『DrawGraph』使用) DrawGraph( 0 , 0 , GHandle[ i ] , FALSE ) ; // アニメーションパターンナンバーを変更 i ++ ; if( i == 10 ) i = 0 ; // 一定時間待つ(『WaitTimer』使用) WaitTimer( 100 ) ; // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが起きたらループから抜ける } } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } Saucerさんの環境では test2.bmp のファイル名を te_st2.bmp にリネームして、 上記プログラムの LoadDivGraph で指定するファイル名を "test2.bmp" から "te_st2.bmp" に変更するとエラーが発生するということでしょうか?
メンテ
Re: LoadDivGraphとアンダースコア ( No.2 )
名前:Saucer 日時:2014/07/20 06:44

そういうことだと思ったのですが、ちょっとわからなくなりました。 管理人様の返信を見て、もうちょっと試してみたのですが、 @"clingl.png"→"cling_l.png" A"jumpla.png"→"jumpl_a.png" B"jumpla.png"→"jump_la.png" と変更してみたところ、@とBは正常に読み込めましたが、 Aのときはエラーが発生しました。 どういうことでしょう…
メンテ
Re: LoadDivGraphとアンダースコア ( No.3 )
名前:管理人 日時:2014/07/20 14:16

うーん、私の環境では@〜Bどの場合も読み込むことができました お使いのDXライブラリのバージョンは幾つでしょうか? もし最新ではないということでしたら最新バージョンでは直っているかもしれませんので、 よろしければこちらの暫定の最新バージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: LoadDivGraphとアンダースコア ( No.4 )
名前:Saucer 日時:2014/07/20 17:13

最新バージョン(3.12a)です… 私の環境に原因がある、ということでしょうか。 変なスレを立ててしまい、申し訳ございません…
メンテ
Re: LoadDivGraphとアンダースコア ( No.5 )
名前:管理人 日時:2014/07/20 19:26

最新バージョンでしたか・・・ うーん、原因はまだ分かりませんが、とりあえず環境が原因かどうかを 確認したいと思いますので、私のPCでコンパイルした jumpl_a.png という ファイル名の画像を LoadDivGraph で読み込むテストプログラムの実行ファイルを こちらにアップしましたので、よろしければ Saucerさんの環境でも正常に動作するか お試しになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/LoadDivGraphTest.zip 内容は関数リファレンスの LoadDivGraph の項目にあるサンプルプログラムで 読み込む画像のファイル名を jumpl_a.png に変更しただけのものです、 正常に動作すると画面左上に緑色の人型キャラがアニメーションします
メンテ
Re: LoadDivGraphとアンダースコア ( No.6 )
名前:Saucer 日時:2014/07/22 10:22

プログラムまで組んでいただき、まことに有難うございます。 私の環境でも管理人様のプログラムは正常に動作しました。 どういうことでしょう…
メンテ
Re: LoadDivGraphとアンダースコア ( No.7 )
名前:Will 日時:2014/07/22 11:34

画像ファイル名に_aとした場合、透過情報用画像ファイルの命名規則になるので、jumpl.pngが存在しているとかないでしょうか?
メンテ
Re: LoadDivGraphとアンダースコア ( No.8 )
名前:管理人 日時:2014/07/23 00:42

Saucerさんの環境でエラーが発生するサンプルプログラムを組むことは可能でしょうか? もしそれが作成できれば私の環境でも確認することができますので、原因を調べることが可能です > Willさん 私も最初その辺りを疑ったのですが、仮に jumpl.png があったとしても jumpl_a.png の 読み込みが指定された場合はまず jumpl_a.png を読み込み、その後透過情報用画像ファイルとしては jumpl_a_a.png というファイル名のファイルを探しに行くので、その線は薄いと思います
メンテ
Re: LoadDivGraphとアンダースコア ( No.9 )
名前:Saucer 日時:2014/07/23 05:55

管理人様のサンプルプログラムを組んでみたところ、 正常に動作しました… 元々エラーが発生した方のプログラムはもっと規模の大きい プログラムですが、一応実行ファイルだけアップいたしました。 https://app.box.com/s/3uw0wxfabqmcnuwvj2bb
メンテ
Re: LoadDivGraphとアンダースコア ( No.10 )
名前:管理人 日時:2014/07/23 08:03

すみません、プログラムのソースファイルを使ってデバッグ実行をしないと原因を調べることが出来ません もし不都合が無ければアップしていただいた実行ファイルのソースファイルをこちらのメールアドレスに 送っていただけないでしょうか? BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください
メンテ
Re: LoadDivGraphとアンダースコア ( No.11 )
名前:Saucer 日時:2014/07/23 15:12

御手を煩わせて申し訳ございません。 ご指定のアドレスにファイルを送らせて頂きました。
メンテ
Re: LoadDivGraphとアンダースコア ( No.12 )
名前:管理人 日時:2014/07/23 22:14

メールありがとうございます、ソースを拝見しました 原因が分かりました、DXライブラリでは LoadGraph や LoadDivGraph を実行した際に 指定された画像ファイルのファイル名の末尾に _a が追加されたファイル名のファイルがあった場合 追加でその画像を読み込み、それをアルファチャンネル用の画像として使用するという仕様があるのですが、 今回の件では jumpl.png というファイルを読み込む際に、 恐らく jumpl.png のアルファチャンネル用の画像というつもりではないと思われる jumpl_a.png がアルファチャンネル用画像として読み込まれてしまっていました アルファチャンネル用画像として読み込まれた場合、元の画像と解像度が異なると読み込みがエラーとなります なので、今回の件では jumpl.png が読み込まれた際に jumpl_a.png がアルファチャンネル用画像として読み込まれ、 jumpl.png と jumpl_a.png の解像度が異なるために jumpl.png の読み込みが失敗、ということになっていました この問題を解決するために 「指定された画像ファイルのファイル名の末尾に _a が追加されたファイル名のファイルをアルファチャンネル用画像として読み込む」 という仕様を使用するかどうかを設定するための関数を追加しました // LoadGraph などの際にファイル名の末尾に _a が付いたアルファチャンネル用の // 画像ファイルを追加で読み込む処理を行うかどうかを設定する // ( TRUE:行う( デフォルト ) FALSE:行わない ) int SetUseAlphaImageLoadFlag( int Flag ) ; こちらの関数を DxLib_Init の後にでも FALSE を渡して呼んでおけば、今回ご報告いただいたエラーは 発生しなくなると思います 上記関数を追加したバージョンをこちらにアップしましたので、よろしければお試しください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: LoadDivGraphとアンダースコア ( No.13 )
名前:Saucer(解決) 日時:2014/07/24 07:00

管理人様の仰る通り、エラーが発生しなくなりました! ご尽力を頂き心から感謝申し上げます。 又、「_a」の特別な扱いを知らなかったことをお詫びいたします。 これからもありがたくDXライブラリを使わせていただきます。 まことに有難う御座いました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存