반응형

WPF 프로젝트 생성

화면캡처에 필요한 Bitmap 등을 사용하기 위해서는 System.Drawing dll 이 필요하다.

하지만, WPF 에서는 기본 DLL 이 아니므로 

 

 - [프로젝트] 메뉴 > [참조추가]에서 System.Drawing 을 추가

 

한다.

 

 

XAML 화면그리기

MainWindow.xaml

위와 같이 간단하게 Button 하나와 Image 를 추가한다.

 

 - Button 의 자원 ID 는 btnCapture

 - Image 의 자원 ID 는 imgCapture

 

라 지정했다.

 

 

 

cs 작성

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;
                }
            }
        }
    }
}

 

 

 

결과 화면

 캡처 버튼을 누르면 위와 같이 캡처가 되는 것을 확인 할 수 있다.

반응형

WRITTEN BY
데르벨준

,