그래서 WPF C#에서 캔버스의 스냅 사진을 찍어서 png로 저장할 수있게하려고합니다. 왼쪽 여백과 위쪽 여백을 포함하고 있기 때문에 이미지는 현재 잘못 저장됩니다.캔버스를 png C# wpf에 저장
이것은 내가 무엇을 가지고 :
캔버스의 크기의 사각형을 만듭니다. canvas.Margin.Left 및 Top이 0으로 설정된 경우 저장된 이미지의 크기는 정확하지만 오프셋이 여전히 발생하여 하단 및 오른쪽 가장자리가 잘립니다. Margin.Left를 설정하고 최고는 여전히 오프셋이 발생하는 원인이 있지만 전체 이미지가 저장되지만되고있는 잘못된 크기 (margin.Left + ActualWidth)이 아니라보다 단지 ActualWidthRect 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);
}
왜 MemoryStream을 만드나요? FileStream을 생성하고 엔코더를 직접 저장하십시오. –