トップページ > 記事閲覧
画像ファイルの入出力
名前:nic1904 日時: 2016/12/22 13:47

いつもお世話になっています。 画像を入出力する際、画像のファイルパスをプログラム内に書いて実行します。 しかし、画像に対して複数の処理をする場合、同じファイルパスを何箇所にも書かなければならず、 別の画像でプログラムを実行したいときにいちいち書き直さなければならず大変です。 変数のように、1箇所変更すればほかの部分にも適用されるようにはできませんか? また、画像の入力を、ドラッグ&ドロップで行うことはできますか?もしできなければ大丈夫です。
メンテ

Page: 1 |

Re: 画像ファイルの入出力 ( No.1 )
名前:管理人 日時:2016/12/24 00:53

> 変数のように、1箇所変更すればほかの部分にも適用されるようにはできませんか? LoadGraph や SaveDrawScreen に渡すファイルのパスを char * 型の変数にすることで その変数に代入するファイルパスを変更すれば他の部分にも適用されるようにすることができます 例:4回の LoadGraph の引数として "Test1.bmp" を全部書いているのを、一箇所 "Test1.bmp" と記述すれば良いようにする GrHandle1 = LoadGraph( "Test1.bmp" ) ; GrHandle2 = LoadGraph( "Test1.bmp" ) ; GrHandle3 = LoadGraph( "Test1.bmp" ) ; GrHandle4 = LoadGraph( "Test1.bmp" ) ; ↓ char *FilePath に "Test1.bmp" のアドレスを代入して使用するようにする char *FilePath = "Test1.bmp" ; GrHandle1 = LoadGraph( FilePath ) ; GrHandle2 = LoadGraph( FilePath ) ; GrHandle3 = LoadGraph( FilePath ) ; GrHandle4 = LoadGraph( FilePath ) ; > また、画像の入力を、ドラッグ&ドロップで行うことはできますか?もしできなければ大丈夫です。 SetDragFileValidFlag( TRUE ) ; を実行してソフトのウインドウに対してファイルのドラッグ&ドロップが できるようにした状態で、GetDragFileNum の戻り値が 1 以上になった際に GetDragFilePath を使用することで ウインドウにドラッグ&ドロップされたファイルのパスを取得することができます 使用例:ウインドウにドラッグ&ドロップされた画像ファイルを読み込んで画面に表示する #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GrHandle = -1 ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // ファイルのドラッグ&ドロップを許可する SetDragFileValidFlag( TRUE ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // ドラッグ&ドロップされたファイルが1つ以上ある場合は画像として読み込む if( GetDragFileNum() > 0 ) { char FilePath[ MAX_PATH ] ; // ドラッグ&ドロップされたファイルのパスを取得する GetDragFilePath( FilePath ) ; // ドラッグ&ドロップされたファイルを画像として読み込む GrHandle = LoadGraph( FilePath ) ; } // 画像を描画する if( GrHandle != -1 ) { DrawGraph( 0, 0, GrHandle, TRUE ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければお使いください m(_ _)m
メンテ
Re: 画像ファイルの入出力 ( No.2 )
名前:nic1904 日時:2016/12/26 16:20

ありがとうございます。 また質問で申し訳ないのですが、ドラッグ&ドロップしたファイルのパスを変数として用いるにはどうすればいいのでしょうか? 上記のプログラムのメインループ内で定義した"FilePath"という変数をほかの部分で使用しても、定義されてないものとしてエラーが出てきてしまいます。 ドラッグ&ドロップした画像のファイルパスだけを取得する方法を教えてください。
メンテ
Re: 画像ファイルの入出力 ( No.3 )
名前:管理人 日時:2016/12/26 23:31

No.1のご返信でのプログラムでは FilePath は if( GetDragFileNum() > 0 ) { char FilePath[ MAX_PATH ] ; // ドラッグ&ドロップされたファイルのパスを取得する GetDragFilePath( FilePath ) ; // ドラッグ&ドロップされたファイルを画像として読み込む GrHandle = LoadGraph( FilePath ) ; } ↑この if 文のスコープ( { } で括られた範囲 )内で宣言しているので、この if 文のスコープ内でしか使用することができません この { } の外や、別の関数でも使用したい場合はグローバル変数として char FilePath[ MAX_PATH ] ; を宣言する 必要があります 「C言語 変数 スコープ」というキーワードでネット検索すると、変数のスコープ( 有効範囲 )について詳しく 解説されているサイトが沢山検出されますので、よろしければご覧になってみてください
メンテ

Page: 1 |

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

   クッキー保存