Microsoft .NET/WPF Tip

[WPF Tip] Canvas를 PNG로 저장하기

전자기린 2019. 4. 30. 17:35

Canvas를 PNG로 저장하기 위해서는 DPI 값이 필요합니다.

 

DPI는 모니터의 해상도 단위이며 1인치당 몇 개의 도트를 출력할 수 있는지를 말합니다.

 

DPI 구하는 방법은 하단 링크에서 설명합니다.

 

[C#] cm <-> pixel 변환, DPI 구하기

DPI 활용 방향 디스플레이에 출력되는 물체의 크기가 실제 크기와 동일해야 하는 경우 DPI를 사용하여 CM를 PIXEL로 변환하여 출력 C#에서 DPI 구하기 public class ScreenInformations { public static uint RawD..

VirtualGiraffe.co.kr


 

Canvas를 PNG로 저장하기 위해서는 아래와 같은 using 지시문을 추가해야합니다.

using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

 

이제 사용 준비는 모두 끝났으니 Canvas에 도형등을 그리고 아래와 같이 PNG File로 저장합니다.

//Canvas의 출력 영역
Rect bounds = VisualTreeHelper.GetDescendantBounds(canvas);

//DPI
double dpi = Screen.ScreenInformations.RawDpi;

//시각적 개체를 비트맵으로 변환
RenderTargetBitmap renderBitmap = new RenderTargetBitmap
(
    (int)bounds.Width,
    (int)bounds.Height,
    dpi,
    dpi,
    PixelFormats.Default
);
renderBitmap.Render(canvas);

//PNG File 저장
using (Stream stream = new FileStream(@"..\temp.png",
FileMode.Create,
FileAccess.Write,
FileShare.None))
{
    PngBitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
    encoder.Save(stream);
}