3

c#.netでwmf画像ファイルをpng形式に変換しようとしています。

ただし、保存した画像が不鮮明です。

私のコード:

Metafile img = new Metafile(@"test.wmf");
MetafileHeader header = img.GetMetafileHeader();
Bitmap bitmap = new Bitmap((int)(img.Width / header.DpiX * 100), (int)(img.Height / header.DpiY * 100));
using(Graphics g = Graphics.FromImage(bitmap)){
    g.DrawImage(img, 0, 0);
}
bitmap.Save("test.png", ImageFormat.Png);

どうすればそれを明確にすることができますか?

4

3 に答える 3

10

.wmf ファイルの DpiX/Y の値が非常に大きい。モニターの解像度に合わせて画像を再スケーリングする必要があります。このコードは、見栄えの良いバージョンのメタファイルを作成しました。必要に応じてスケーリングを微調整するか、後でビットマップを再スケーリングすることができます。

        using (Metafile img = new Metafile(@"c:\temp\test.wmf")) {
            MetafileHeader header = img.GetMetafileHeader();
            float scale = header.DpiX / 96f;
            using (Bitmap bitmap = new Bitmap((int)(scale * img.Width / header.DpiX * 100), (int)(scale * img.Height / header.DpiY * 100))) {
                using (Graphics g = Graphics.FromImage(bitmap)) {
                    g.Clear(Color.White);
                    g.ScaleTransform(scale, scale);
                    g.DrawImage(img, 0, 0);
                }
                bitmap.Save(@"c:\temp\test.png", ImageFormat.Png);
            }
        }
于 2011-10-31T11:16:43.500 に答える
0

最後に、私はIDEAを手に入れました!!

それはInkspaceを使用することです。
ご存知のように、Inkscape はベクター グラフィックス エディターです。
今日、INKSCAPE にコマンドラインオプションがあることを知りました!! http://goo.gl/Moksf .
したがって、次のようないくつかのオプションを指定して incape.exe を呼び出す必要があります。

Process.Start("inkscape.exe -f {wmf_filename} -e {png_filename_to_be_made}");

変換された png ファイルは次のとおりです: http://yfrog.com/gyu40ap
非常に鮮明な png 画像。それが私がしたかったことです!

ありがとうございました!

于 2011-11-01T01:53:25.417 に答える
0

EMF ベクトルは、PNG に変換するときに非常に奇妙になることがあります (特に小さな形式が使用されている場合)。私はそれを4倍に爆破し、それを必要なサイズに変換することになりました. この戦略を使用すると、結果が向上します。

GDI レンダリング
ソース: https://keestalkstech.com/2016/06/rasterizing-emf-files-with-net-c/

于 2016-06-02T07:30:42.497 に答える