トップページ > 過去ログ > 記事閲覧
実行ファイルにした後の画像
名前:exe 日時: 2010/03/12 21:27

画像を表示し、ボタンを押したら終了というサンプルプログラムですが、これをVC++2008EEでReleaseビルドしてできたexeファイルで実行するとき exeと同じ場所にsample.pngがないと画像は表示されませんよね? それで質問なのですが、 1、この画像をexeを実行しただけ(exeと同じ場所にsample.pngを置かない)で表示することはできるのでしょうか。 2、できるとしたらどのような方法なのか。 よろしければ御教授ください。よろしくおねがいします。 #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } int graphic = LoadGraph("sample.png"); DrawGraph(0, 0, graphic,false); WaitKey() ; // キー入力待ち DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Page: 1 |

Re: 実行ファイルにした後の画像 ( No.1 )
名前:txt 日時:2010/03/13 02:12

ファイルとして読み込まず、リソースに埋め込んでしまいましょう。
Re: 実行ファイルにした後の画像 ( No.2 )
名前:exe 日時:2010/03/13 03:11

txtさん、返信ありがとうございます。 「リソースに埋め込む」とは具体的にはどうすればいいのでしょうか? 調べてみたのですがいまいち理解できるページが見つかりませんでした。 どなたかよろしければ手順、あるいは参考ページなど教えていただけないでしょうか?
Re: 実行ファイルにした後の画像 ( No.3 )
名前:Masao 日時:2010/03/13 06:07

質問の解釈の仕方次第ですが、おなりディレクトリじゃなければいいということでしょうか? だったら、フォルダ作って読み込むとか駄目ですか? ファイルパスは、こうなりますが・・・ "folder/sample.png" でも、これじゃ駄目ならリソースですかねー。 リソースは、WindowsAPI 解説しているところの、どこかの章にあったりします。 猫のサイトとかいいですお。
Re: 実行ファイルにした後の画像 ( No.4 )
名前:exe 日時:2010/03/13 06:34

Masaoさん、返信ありがとうございます。 質問の書き方が曖昧ですみません。 ディレクトリやフォルダから読み込むやり方ではなくexeに画像を入れてしまいたい。ということになります。 リソースについて少し調べてみましたが「リソーススクリプト」や「リソースコンパイラ」などのキーワードには行き着いたのですが実際のやり方がわからないのです。 アイコンを例にしたページが目についたのですがそれもいまいちでした。 大雑把には、 1、画像ファイルをリソースファイルにする 2、サンプルに挙げたようなプログラム内で画像ファイルではなく1で作成したリソースファイルを読み込む 3、リリースビルド であってるのでしょうか? 質問をまとめると、 1、画像ファイルをどのようにリソースファイルにすればいいのか 2、それをVC++で最初に記述したサンプルプログラム上でどのように使えばいいのか ということになります。 猫サイトやWindowsAPI関連サイト、参考にします。ありがとうございます。
Re: 実行ファイルにした後の画像 ( No.5 )
名前:いっち 日時:2010/03/13 14:17

以下のような手順で出来ると思います。(説明はVS2008EEを基準にしています) 手順1.プロジェクトを作成し、以下の4つファイルをプロジェクトのフォルダに格納してください。 //-- map.png --// 画像ファイル。内容はなんでも可 //-- Resouce.h --// #define MAPPNG 101 //-- Resouce.rc --// #include <windows.h> #include "Resource.h" MAPPNG MYGRAPHIC DISCARDABLE "map.png" //-- main.cpp --// #include "DxLib.h" #include "Resource.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int gh; gh = LoadGraphToResource( MAKEINTRESOURCE( MAPPNG ), "MYGRAPHIC" ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawGraph( 0, 0, gh, FALSE ); ScreenFlip( ); } DxLib_End( ); return 0; } 手順2.メニューから、「プロジェクト」→「既存の項目の追加(Shift+Alt+A)」でPNG以外のファイルをすべてプロジェクトに含めます。 手順3.コンパイルして実行で画像が表示されると思います。
Re: 実行ファイルにした後の画像 ( No.6 )
名前:exe 日時:2010/03/13 22:36

いっちさん、返信ありがとうございます。 丁寧にサンプルコードまでありがとうございます! おかげさまでexeだけで画像も表示することができるようになりました。 txtさん、Masaoさん、いっちさん、本当にありがとうございました。 余談ですがVC++2008EEではリソースコンパイラは備わっているのにリソースファイルの追加という項目はないようですね。 cppファイルの拡張子を無理やり.rcに変更して使用しました(汗)
Re: 実行ファイルにした後の画像 ( No.7 )
名前:いっち 日時:2010/03/14 00:19

余談ですがDxLibには"GetResourceInfo"という関数があります。 この関数を使うと、対象のリソースをメモリに読み込み、アドレスを取得できます。 (戻り値は成功が 0 、エラーが -1 です) 取得したアドレスはシステムがプログラム終了時に自動的に開放してくれます(たしか、たぶん・・・)。 (今回ちょろっと見ただけなので情報は不確かです。すみません)
Re: 実行ファイルにした後の画像 ( No.8 )
名前:exe 日時:2010/03/14 04:33

GetResourceInfo( const char *ResourceName , const char *ResourceType , void **DataPointerP , int *DataSizeP ) ; 第3引数には汎用ポインタでデータのアドレス、第4引数ではint型でデータサイズのアドレスを指定していますがこれは何にあたる部分なのでしょう? グラフィックハンドル等ですか?
Re: 実行ファイルにした後の画像 ( No.9 )
名前:いっち 日時:2010/03/14 13:41

第3引数はデータを格納したアドレスを受け取るための変数のアドレスで、 第4引数は格納したデータのサイズを受け取るための変数のアドレスです。 ( No.5 )のソースをGetResourceInfoを使って実現すると以下のようになります。 //-- サンプル --// #include "DxLib.h" #include "Resource.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); void *pData; int DataSize; GetResourceInfo( MAKEINTRESOURCE( MAPPNG ), "MYGRAPHIC", &pData, &DataSize ); int gh = CreateGraphFromMem( pData, DataSize ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawGraph( 0, 0, gh, FALSE ); ScreenFlip( ); } DxLib_End( ); return 0; }

Page: 1 |