- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メタファイルがうまく保存できない)
メタファイルが保存できない | Visual Studio2010 + VC + MFC
このQ&Aのポイント
- MFCを使用してイメージを保存するプログラムを組んでいますが、Windows7ではファイル保存時に右側が欠けてしまいます。原因を教えてください。
- MFCを使ったプログラムでメタファイルを作成し、図形を書き込んでファイルを保存しています。しかし、Windows7ではファイル保存時に右側が欠けてしまいます。原因が分かる方、教えてください。
- Visual Studio2010 + VC + MFCを使用してイメージを保存するプログラムを開発しています。ただし、Windows7では右側が欠けてしまって思い通りの大きさでファイル保存できません。解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>pDCMeta->SetWindowExt(mmWidth, mmHeight); >pDCMeta->SetViewportExt(pxWidth, pxHeight); これらでエラーの発生を見ていないのが気になります。 スケーリング変更の際に、デバイスコンテキストに必要なだけの内部ビットマップを確保出来なかった場合、これらの関数はエラーを起こします。 XPで成功してWin7で失敗するなら、このような「内部ビットマップの確保の処理」のように、メモリの使用量の違いやシステム環境違いが動作に影響する処理の部分で何かが起きていると思われます。
お礼
chie65535様 その後、調査し解決できましたので結果報告したいと思います。 現在、Viewのマップモードは、MM_ANISOTROPICを使い、 ピクセルとMMの変換には、GetDeviceCaps(LOGPIXELSX)を使っています。 詳しいことは分からないのですが、拡張メタファイルを作成するAPIは マップモードにMM_HIMETRICが使われているようです。 なので、CreateEnhMetaFileでサイズを指定する際のピクセルとMMの変換には 以下を使うようにしたら思いどおりのサイズの拡張メタファイルが作成でいました。 GetDeviceCaps(HORZSIZE); GetDeviceCaps(HORZRES); 有難うございました。
補足
chie65535様、いつもご回答有難うございます。 SetMapMode()/SetWindowExt()/SetViewportExt()の戻り値を見たのですがエラーは 発生していませんでした。 ただ、気になる点があります。 WinXp(成功)と Win7(失敗)で作成した拡張メタファイルをWord2003に取り込んだ後、 イメージを選択し右クリックで「図の編集」を選択すると WinXP(成功)で作成したメタファイルは、イメージと同じ図形が描画されるのですが Win7(失敗)で作成したメタファイルはページに表示できないサイズに拡大され その中に描画した図形が表示されているようです。 WinXPとWin7でメタファイルの定義が変わったのでしょうか? または、設定が何か設定が足りないのでしょうか。 分かりづらい文章ですみません。 何か気づいた点などありましたら教えて下さい。 どうぞ宜しくお願い致します。