7

アンチエイリアスを有効にして emf メタファイル (描画ツールからエクスポート) を描画する方法はありますか? 私が試したツールは、アンチエイリアスされた emf ファイルをエクスポートできないため、コントロールの OnPaint オーバーライドで emf を描画するときに、手動でオンに戻すことができるかどうか疑問に思いました。

アンチエイリアスされたemfファイルを生成することが技術的に可能であることを誰かが確認できる場合、別の解決策は、アンチエイリアスされたemfにエクスポートできる描画ツールを使用するか、サードパーティのコンバーターに後でこれを実行させることです. そのようなツールを知っている人がいたら教えてください。

編集: emf 命令を見ると、 emf 自体がアンチエイリアス処理されるかどうかに関係なく、実際に情報を格納できるようには見えません。少なくとも私は何も見つかりませんでした。アンチエイリアシングは再生エンジンによって行われる可能性が高くなります。たとえば、Word 2007 で emf を開くと、アンチエイリアスが適用されます。しかし、GDI+ の「再生エンジン」( Graphics.DrawImage(...)) で描画した場合はそうではありません。または、標準の Windows 画像ビューアで表示します。これは、いくつかのツールが実際に独自の emf 再生エンジンを持っていると私に信じさせます。したがって、解析されたemfファイルに格納されているemf命令のオブジェクトモデルを提供する無料の.NETライブラリ(できればソースコード付き)があるので、使用する代わりに自分で再生できますGraphics.DrawImage(...)か?

4

3 に答える 3

9

DirectXプロジェクトでも同様の問題が発生しました。アップスケーリングとダウンスケーリングはある程度機能しますが、それは偽物です。それを何度も繰り返す必要がある場合は、おそらくWMFのレコードを解析し、アンチエイリアス処理されたGDI+を使用してそれらを描画することができます。

次のスレッドがこれをバックアップします(ただし、2005年のものであるため、状況が変更されている可能性があります)。

http://www.dotnet247.com/247reference/msgs/28/144605.aspx

http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-sdk/1127/Graphics-DrawImage-metafile-no-antialiasing

[編集:]

これらの3つのプログラムはあなたのために仕事をするかもしれません:私はあなたが手でそれをすることに大丈夫だと思います:

http://emf-to-vector-converter-command-line-ser.smartcode.com/info.html

http://www.verypdf.com/pdf-editor/index.html

http://www.ivanview.com/converter/emf-batch-converter.html

[編集II:]

さて、これがあなたが様々な方法でEMFを検査することを可能にするプログラムです:

http://download.cnet.com/windows/3055-2383_4-10558240.html?tag=pdl-redir

...これがフリーウェアライブラリで、122個のEMFコマンドを解析してGDI+に出力できるようにします。それはおそらくトリックを行う必要があります:

http://www.codeproject.com/KB/GDI-plus/emfexplorer.aspx?msg=2359423

...ああ、codeprojectページのコメント#3にも注意してください。誰かが前に壁に頭をぶつけたことがあるようです。これで問題が解決することを願っています。

于 2009-11-23T18:10:07.303 に答える
4

EMF は GDI+ ではなく GDI コマンドを使用しているため、アンチエイリアシングの概念はありません。ファイルをレンダリングするように GDI+ に要求すると、ファイルが GDI に送信され、結果のビットマップがコピーされるだけだと思います。

これをコードで複製することは、GDI を再実装することと同じであるため、非常に現実的ではありません。不可能ではありません。利益よりも大きな仕事が正当化されるだけです。Windows 以外で EMF ファイルを開くことができるオープン ソース ユーティリティがある場合は、ソース コードを調べることができます。

私の推測では、Word はダウンサンプリング トリックを使用しています。

于 2009-11-25T19:47:17.437 に答える
3

EMF ファイルは GDI コマンドのリストです。そのため、GDI+ で描画の前に SmoothingMode() 呼び出しを行っても、アンチエイリアスは適用されません。GDI コマンドを列挙してから、それを GDI+ コマンドに変換する必要があります。

Vista/Seven では、GdipConvertToEmfPlus/ConvertToEmfPlus という名前の GDI+ 1.1 関数を使用できます。プログラムを XP で動作させたい場合は、独自の列挙を作成してから、GDI+ コマンドに変換する必要があります。

GDI 列挙と GDI+ への変換はemfexplorerによって行われましたが、Delphi で書かれている場合でも、おそらくより簡単に理解できるコードをいくつか書きました。

ConvertToEmfPlus を使用して解決策を見つけるのに多くの時間を費やし、この方法が利用できない場合に備えて調整されたオープン ソース コードを作成したため、今この回答を掲載しています (遅れています)。

于 2011-01-20T18:48:18.643 に答える