WPFでアプリ画面をキャプチャーしてJpegで保存する(exif付き)
なにでググったらよかったのか分からなかったので自分で書きます(主にexifのところが)
ソース
とりあえず動くものを置きました。自由に使ってください
以下はその説明みたいな感じ
UIElementを画像にする
WPFなのでSystem.Drawingは使いません(たまに使うけど)
var width = (int)CaptureTarget.ActualWidth; var height = (int)CaptureTarget.ActualHeight; // UIElement to RenderTargetBitmap var renderTargetBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); var visual = new DrawingVisual(); using (var context = visual.RenderOpen()) { var brush = new VisualBrush(CaptureTarget); context.DrawRectangle(brush, null, new Rect(0, 0, width, height)); } renderTargetBitmap.Render(visual);
RenderTargetBitmap
とDrawingVisual
でうまいこと作りましょう
exifを付ける
BitmapMetadata
ってのを作ってその中にいろいろ入れちゃいます
var encoder = new JpegBitmapEncoder(); // Add exif data var metadata = new BitmapMetadata("jpg"); metadata.ApplicationName = Assembly.GetExecutingAssembly().GetName().Name; metadata.Comment = Assembly.GetExecutingAssembly().GetName().Version.ToString(); metadata.DateTaken = DateTime.UtcNow.ToString(DateTimeFormatInfo.InvariantInfo); //Custom metadata //metadata.SetQuery("", ""); encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap, null, metadata, null));
一般的なのはプロパティとしてすでに生えているのでそこに代入
今回はアプリ名・コメント(バージョン)・作成日時を入れてみました
プロパティが無い奴はSetQuery
メソッドで追加できるっぽいです
あとは保存して完成
できました