メタファイル(EMFファイル)を解析したいのですが

解決


MixLang初心者  2005-01-15 02:02:37  No: 56010

EMFファイルを解析して、具体的にどんなGDI命令が行われていたのかを知りたいのですが
(最終的にはEMFファイルをCAD用のDXFという形式のテキストファイルに変換するのが目的です)
EMFファイルの具体的な仕様が分からないので困っています。

VCの"EnumEnhMetaFile関数"とそのコールバック関数"EnhMetaFileProc関数"を使えば良い所までは分かっているのですがその先が分かりません。

日本語の参考書、HPなどありましたらご教授ください。


foo  2005-01-15 05:23:15  No: 56011

日本語では無いですが。。。
http://www.wotsit.org/
ここにEMFファイルのフォーマットの説明があります。
AutoCAD DXFのファイルフォーマットもあるので
二つあわせて見てみたらいかがでしょう。


MixLang初心者  2005-01-18 00:57:34  No: 56012

foo様、どうもありがとうございます。
日本語のドキュメントはないのですね……。
参考にさせていただきます。

せっかくお答えいただいたのに、たいへん申し訳ないのですが、
別の方向からのアプローチを試みようかと思っています。
foo様が紹介してくださったHPからEMFの仕様はダウンロードしましたので、
「別の方向からのアプローチ」が失敗したら参考にさせていただきます。


MixLang初心者  2005-01-21 00:53:00  No: 56013

追加情報です。
WinGDI.hに定義されている
EMR_XXX(例:EMR_MOVETOEX)という定数が、実行されたGDI関数名を表すようです。
(例:EMR_MOVETOEXという定数はMoveToEx関数が実行されていた事を表す。)
EnhMetaFileProc関数でEMFを解析するときは、第3引数 lpEMFR のメンバの iType の値をEMR_XXX定数と比較してください。
EnhMetaFileProc関数の第3引数 lpEMFRを詳しく解析するときには、
定数名から"_"(アンダーバー)を除いた名前で定義されている構造体を参照してください。
(例:MoveToEx関数の詳しい解析にはEMRMOVETOEX構造体を用いる)。

AutoCADにはWMF読み込みという機能があるので、
EMFをGetWinMetaFileBits関数等を用いてWMFに変換すれば線画として取り込めるのですが、
AutoCADとWMF内のMoveTo/LineTo関数の相性が悪いようで正しく読み込まれません。
私はWMF変換前のEMF内のMoveToEx/LineTo関数をEnumEnhMetaFile/EnhMetaFileProc関数を用いて
PolyLine関数に置き換える事によってAutoCADでのWMF読み込みに成功しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加