ページ 11

【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 00:18
by 奥兵
現在サンプルを見ながらGDI+と格闘しています。

様々なサンプルを参考としつつ、なんとか画像の表示はできました。
ですが描画ごとに読み込みを行なっているので、読み込み関数と描画関数に分け
画像のデータをポインタか構造体を渡す形にしたいと思い、あの手この手でいじってみたのですが全くうまくいきません。
”image”が画像を格納している変数かなにかだということは想像つくのですが、
このimageを関数の外で宣言して読み込み用の関数で画像を読み込み、描画用の関数に渡したいと思っています

コード:

int DrawGraphics(HWND hWnd,HDC hdc){//描画

	Graphics MyGraphics(hdc);	 
	Gdiplus::Image image(L"..\\test.jpg");//←LoadGraphicsに移動させたい 
    MyGraphics.DrawImage( &image, 0, 0 );

return 0;
}
int LoadGraphics(){//画像読み込み
	//Gdiplus::Image image(L"..\\test.jpg");//←ここに移動させたい
return 0;
}
DrawGraphics関数はプロシージャのWM_PAINTで呼び、LoadGraphicsはWM_CREATEで呼んでいます
”image”が画像を格納している変数かなにかだということは想像つくのですが、
このimageを関数の外で宣言してLoadGraphics関数で画像を読み込み、DrawGraphics関数に渡すような感じにしたいのです。
どなたかアドバイスお願いします。

Re: 【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 01:00
by ISLe
検証してませんがたぶんこういうことですかね。

コード:

Gdiplus::Image *image; // 外部変数
int DrawGraphics(HWND hWnd,HDC hdc){//描画
    Graphics MyGraphics(hdc);    
    MyGraphics.DrawImage( image, 0, 0 );
    return 0;
}
int LoadGraphics(){//画像読み込み
    image = new Gdiplus::Image(L"..\\test.jpg");
    return 0;
}

Re: 【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 01:49
by 奥兵
夜分に関わらず素早いアドバイスありがとうございます。
早速ご指摘いただいたようにやってみました。
一応コンパイルはできたのですがウィンドウが真っ白で何も表示されません。
もう少し大きな範囲のソースを晒したほうがいいですかね?

Re: 【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 02:28
by tamaneko
C/C++ど初心者で、さらにGDI+はさっぱり分らないので、あてずっぽうで書きますが
Image::FromFile
Image::FromStream
とかを使うんじゃないですか

Re: 【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 11:19
by softya(ソフト屋)
Gdiplus::Image *image; // 外部変数
だと不要になった時のdeleteを書いていませんのでメモリリークだと判断されそうですね。
Gdiplus::Image image; // 外部変数
としておいて私もFromFileメソッドを使ったほうが良いと思います。
そうすればデストラクタで読み込んだ画像も破棄されるはずですので楽ができます。

それとGDI+はC++の文法なのでC++の勉強もおすすめします。

[補足]
あとISLeさんの方法でも動くはずなんで組み込み方が間違っている可能性は十分にあります。

Re: 【GDI+】画像読み込みについて

Posted: 2012年5月01日(火) 22:28
by 奥兵
失礼、遅くなりました。

どうやらというか、やはり私のC++の理解力が圧倒的に不足しているようです^^;
もう少ししっかり勉強してみます、たくさんのアドバイスありがとうございました。