7

私はEMFファイルを持っています。小さくリサイズしたい。

ぼやけた画像を取得せずに.net(または任意のツール)でこれを行うにはどうすればよいですか?

結果のサイズ変更された画像は別の形式(png / jpg /何でも)に変換されますが、それを処理できます(と思います)。

emf/metafiles を扱う .Net (または任意の言語プラットフォーム) で明確な例を見つけられませんでした。

GDI+ を使用したグラフィックス プログラミングを調べましたが、メタファイルしか紹介されていません。

Image Magickを試しましたが、別の形式に変換する必要があり(とにかく行う必要があります)、結果がぼやけています(たとえば、縮小してpngに変換した場合)。

Inkscape を試してみましたが、インポートできるのは EMF ファイルのみであり、Inkscape はそれを逆さまに、不均衡 に既存の図面にインポートします。

また、(笑わないでください) Window の Paint (emf を開くことができる数少ない画像編集ソフトウェア プログラムの 1 つ) でそれを開き、図面のサイズを変更しましたが、やはりぼやけています。

更新:サイズ変更に使用しているコードは次のとおりです。

これは機能しますが、結果の画像はぼやけています。コードは単なる一般的な画像サイズ変更ルーチンであり、EMF に固有のものではありません。

private static Image resizeImage(Image imgToResize, Size size)
{
    int sourceWidth = imgToResize.Width;
    int sourceHeight = imgToResize.Height;

    float nPercent = 0;
    float nPercentW = 0;
    float nPercentH = 0;

    nPercentW = ((float)size.Width / (float)sourceWidth);
    nPercentH = ((float)size.Height / (float)sourceHeight);

    if (nPercentH < nPercentW)
        nPercent = nPercentH;
    else
        nPercent = nPercentW;

    int destWidth = (int)(sourceWidth * nPercent);
    int destHeight = (int)(sourceHeight * nPercent);

    Bitmap b = new Bitmap(destWidth, destHeight);
    Graphics g = Graphics.FromImage((Image)b);
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
    g.Dispose();

    return (Image)b;
}

ソース: http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing

4

3 に答える 3

6

emf画像のサイズを変更するために、次のコード(編集後のコードと同様)を使用しています。ぼやけていないようです。

var size = new Size(1000, 1000);

using(var source = new Metafile("c:\\temp\\Month_Calendar.emf"))
using(var target = new Bitmap(size.Width, size.Height))
using(var g = Graphics.FromImage(target))
{
    g.DrawImage(source, 0, 0, size.Width, size.Height);
    target.Save("c:\\temp\\Month_Calendar.png", ImageFormat.Png);
}
于 2012-08-23T20:14:34.907 に答える
1

.NetはEMFをロードおよび描画できます。

Metafile myMetafile = new Metafile("SampleMetafile.emf");
graphics.DrawImage(myMetafile, 100, 100);

結果の画像がぼやけている場合は、可逆圧縮のPNG / GIFとして保存するか、より大きな画像にレンダリングすることを検討してください。

それでも結果が十分でない場合は、GDI32を使用してロードおよびレンダリングする必要があります。

于 2012-08-23T20:16:13.433 に答える