WPFでベクタ画像(EMF)を表示
.emfのベクタ画像をきれいに拡大して表示できるビューアを探してたけど
良いのが見つからなかったので作った。
WPFでemf画像を表示するのは案外簡単だった。
System.Drawing.Image.FromFileで読み込めるので、
あとはBitmapに変換したりとかいい感じに扱える。
WPFのImageコントロールを使って表示するには
System.Drawing.BitmapをSystem.Windows.Media.BitmapSourceにWin32無しで変換する。 - 亀岡的プログラマ日記
を参考というか丸パクリさせて頂きつつ。
最終的にこんなん。
using System.Drawing; using System.Windows.Media.Imaging; namespace EmfView { class MetaImage { public static BitmapSource LoadFromFile(string path, double rate) { using (var image = Image.FromFile(path)) using (var canvas = new Bitmap((int)(image.Size.Width * rate), (int)(image.Size.Height * rate))) using (var graphics = Graphics.FromImage(canvas)) { graphics.DrawImage(image, 0, 0, (int)(image.Size.Width * rate), (int)(image.Size.Height * rate)); return canvas.ToWPFBitmap(); } } } }
pathにファイルパス、rateに拡大率を設定する感じで。
Image.FromFileが対応してるファイルなら
ベクタ画像(*.emf, *.wmf)に限らずラスタ画像(*.bmp, *.png, ...)も読める。
SVG(*.svg)は残念ながら…
表示側は
<Image Name="image1" Stretch="None"/>
からの
var path = @"D:\pic\pic1.emf"; var rate = 1.0; this.image1.Source = MetaImage.LoadFromFile(path, rate);
みたいに。
作ったアプリ。
github.com