8

そのため、キャンバスのスナップショットを WPF C# で取得して、png として保存できるようにしようとしています。現在、画像には左マージンと上マージンが含まれているため、正しく保存されません。

これは私が持っているものです:

キャンバスのサイズの長方形を作成します。canvas.Margin.Left と Top が 0 に設定されている場合、保存された画像は正しいサイズですが、それでもオフセットが発生するため、下端と右端が切り取られます。Margin.Left と Top を設定してもオフセットが発生しますが、画像全体が保存されますが、ActualWidth だけでなく間違ったサイズ (margin.Left + ActualWidth) で保存されます

Rect rect = new Rect(canvas.Margin.Left, canvas.Margin.Top, canvas.ActualWidth, canvas.ActualHeight);

double dpi = 96d;

RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, (int)rect.Bottom, dpi, dpi, System.Windows.Media.PixelFormats.Default);

rtb.Render(canvas);

BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));

try
{
    System.IO.MemoryStream ms = new System.IO.MemoryStream();

    pngEncoder.Save(ms);
    ms.Close();

    System.IO.File.WriteAllBytes(filename, ms.ToArray());
}
catch (Exception err)
{
    MessageBox.Show(err.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
4

1 に答える 1