[Avalonia] 화면캡쳐 with Wpf
by #독개#WPF에서는 System.Drawing.dll이 Winform과 쓰이는게 다르다
그래서 기본적으로 사용이 불가능한데
Nuget에서 System.Drawing.Common 패키지를 설치해주면 동일하게 사용가능하다
WPF
// 화면캡쳐
private void btnScreenCapture01_Click(object sender, RoutedEventArgs e)
{
ScreenShot(DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".png");
}
private void ScreenShot(string filename)
{
// 주화면의 크기 정보 읽기
int width = (int)SystemParameters.PrimaryScreenWidth;
int height = (int)SystemParameters.PrimaryScreenHeight;
// 화면 크기만큼의 Bitmap 생성
// 0,0에서 width,height만큼 가져온다
using (Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
// Bitmap 이미지 변경을 위해 Graphics 객체 생성
using (Graphics gr = Graphics.FromImage(bmp))
{
// 화면을 그대로 카피해서 Bitmap 메모리에 저장
gr.CopyFromScreen(0, 0, 0, 0, bmp.Size);
}
// Bitmap 데이타를 파일로 저장
bmp.Save(filename, ImageFormat.Png);
}
}
응용 UI에 뿌려주기
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
namespace SimcityBuilditMacro
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 캡쳐
// 비교
}
private void BtnCapture_Click(object sender, RoutedEventArgs e)
{
ScreenCapture();
}
public void ScreenCapture()
{
// 주화면의 크기 정보 읽기
int width = (int)SystemParameters.PrimaryScreenWidth;
int height = (int)SystemParameters.PrimaryScreenHeight;
// 화면 크기만큼의 Bitmap 생성
using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb))
{
// Bitmap 이미지 변경을 위해 Graphics 객체 생성
using (Graphics gr = Graphics.FromImage(bmp))
{
// 화면을 그대로 카피해서 Bitmap 메모리에 저장
gr.CopyFromScreen(0, 0, 0, 0, bmp.Size);
}
// Bitmap 데이타를 파일로 저장
//bmp.Save("test.png", ImageFormat.Png);
// Bitmap 2 BitmapImage
// Image에 캡처한 이미지를 뿌려주기 위해 Bitmap을 BitmapImage로 변환한다.
using (MemoryStream memory = new MemoryStream())
{
bmp.Save(memory, ImageFormat.Bmp);
memory.Position = 0;
BitmapImage bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
bitmapimage.StreamSource = memory;
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
bitmapimage.EndInit();
imgCapture.Source = bitmapimage;
}
}
}
}
}
Avalonia
아발로니아에서도 동일하게 모두 작동하나 전체화면의 크기 정보를 읽어오는
// 주화면의 크기 정보 읽기
int width = (int)SystemParameters.PrimaryScreenWidth;
int height = (int)SystemParameters.PrimaryScreenHeight;
이부분이 안된다
방법을 한번 찾아봐야 할것 같다
'🏹 프로그래밍 활용 > Avalonia' 카테고리의 다른 글
| [Avalonia] Settings.Setting 사용하기 (0) | 2022.12.19 |
|---|---|
| [Avalonia] Execute , CanExecute (0) | 2022.12.19 |
| [OpenCV] Winform, Wpf, Avalonia (1) | 2022.12.18 |
| [Avalonia] Drop File (0) | 2022.12.17 |
| [Avalonia] window창 드래그로 이동하기 (0) | 2022.12.16 |
블로그의 정보
독한 개발자
#독개#