[Canvasの画像をファイルに保存するCanvasクラスの拡張メソッド]
public static class CanvasExtension
{
/// [SaveImage]:Canvasの画像をファイルに保存するCanvasクラスの拡張メソッド
/// 出典:http://qiita.com/hugo-sb/items/894914f6bbe224a45d49
///
///
/// 保存する画像ファイル名
/// BitmapEncoderが指定されなかった場合はPNG形式になる
public static void SaveImage(this Canvas canvas, string path, BitmapEncoder encoder = null)
{
// レイアウトを再計算させる
var size = new Size(canvas.ActualWidth, canvas.ActualHeight);
canvas.Measure(size);
canvas.Arrange(new Rect(size));
// VisualObjectをBitmapに変換する
var renderBitmap = new RenderTargetBitmap((int)size.Width, // 画像の幅
(int)size.Height, // 画像の高さ
96.0d, // 横96.0DPI
96.0d, // 縦96.0DPI
PixelFormats.Pbgra32); // 32bit(RGBA各8bit)
renderBitmap.Render(canvas);
// 出力用の FileStream を作成する
using (var stream = new System.IO.FileStream(path, System.IO.FileMode.Create))
{
// 変換したBitmapをエンコードしてFileStreamに保存する。
// BitmapEncoder が指定されなかった場合は、PNG形式とする。
encoder = encoder ?? new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
encoder.Save(stream);
}
}