pngの描画 – プログラミング – Home

通知
すべてクリア

[解決済] pngの描画


gdiplus
 gdiplus
(@gdiplus)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

vs2005 MFCです

ダイアログベースでPNGを描画させたいのですが方法として
gid+を使おうと考えています。

1.GdiplusStartup()
2.ImageとしてPNGを読み込む
3.Gdiplus::Graphics() で描画させるDCを取得する
4.3のDCでDrawImage()で描画

という流れで処理しようとしています。が、描画できません。

概要ソース
Gdiplus::Image *pImage = new Image(Lc:\\test.png);
Gdiplus::Graphics Mydc(this->m_hWnd);
Mydc.DrawImage(pImage,0,0);

で描画できません。ご教授ください。
picture boxに描画させたいのですがpicture boxのdcでできなかったので
ダイアログに描画させようとしています。


引用未解決
トピックタグ
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

描画コードはどこに書いているか?

PNGファイルは正しく読み込めているか?
(GDI+オブジェクトのnewは例外を投げないので
pImageがNULLでないこととGetLastStatus()の値を確認)

DrawImageでエラーになっていないか?
(戻り値がGdiplus::Okになっているか確認)

といったあたりを調べてみてはどうでしょうか。


返信引用
gdiplus
 gdiplus
(@gdiplus)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

>描画コードはどこに書いているか?

Dlgの::OnPaint()以外で書いていました。OnPaint()の中で書くと描画できました。

OnPaint()以外の部分でコードを書いてしまうとDlgの::OnPaint()
の処理で描画を上書きされているようです。

Gdi+を使うときはOnPaint()の中に処理を書かなければならないのでしょうか?
今の作りではそれは難しいです。

OnPaint()以外で処理して描画更新とかできないのでしょうか?

PNGの読み込みはImage::FromFile()としました。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

GDI+とか関係なしに、一般的には裏画面と呼ばれるものに描画し、
OnPaintでそれを表画面に転記するようなつくりにします。

CreateCompatibleBitmap CreateCompatibleDC BitBlt

あたりをキーワードに調べてみてください。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>OnPaint()以外で処理して描画更新とかできないのでしょうか?
読み込みはOnPaint以外でやるべきですが、描画については
OnPaintでないとOSからの描画要求に応答できません。
プログラムからはInvalidateやInvalidateRectで
任意のタイミングで再描画できます。
#GDI+かどうかは関係ありません。


返信引用
gdiplus
 gdiplus
(@gdiplus)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

お二方、ありがとうございました。
描画設定、描画処理を切り分けるように変更しました。
解決です


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました