C# - SharpDX + DXGI를 이용한 윈도우 화면 캡처 라이브러리
지난 글에 써 둔,
C# - SharpDX + DXGI를 이용한 윈도우 화면 캡처 소스 코드
; https://www.sysnet.pe.kr/2/0/11400
코드를 NuGet에 라이브러리로 등록해 두었습니다. ^^
DxgiScreenCapture
; https://www.nuget.org/packages/DxgiScreenCapture/
그래서 그냥 참조만 추가하고,
Install-Package DxgiScreenCapture -Version 1.0.0
Windows Forms 프로젝트에서 다음과 같이 사용하면 됩니다.
using DxgiScreenCapture;
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
    // Install-Package DxgiScreenCapture -Version 1.0.0
    public partial class Form1 : Form
    {
        readonly ScreenCapture _screenCapture;
        public Form1()
        {
            InitializeComponent();
            _screenCapture = new ScreenCapture(_viewBox, new System.Drawing.Rectangle(200, 200, 500, 500));
            _screenCapture.Captured += _screenCapture_Captured;
        }
        private void _screenCapture_Captured(object sender, CapturedEventArgs e)
        {
            IntPtr srcPtr = e.Data.DataPointer;
            // 캡처한 이미지의 BGR 데이터 추출
            for (int i = 0; i < e.Data.Length; i += 4)
            {
                byte b = Marshal.ReadByte(srcPtr);
                byte g = Marshal.ReadByte(srcPtr + 1);
                byte r = Marshal.ReadByte(srcPtr + 2);
            }
        }
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            _screenCapture.Dispose();
            base.OnFormClosing(e);
        }
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Cancel) // Ctrl + C
            {
                _screenCapture.SignalToCapture();
            }
            base.OnKeyPress(e);
        }
    }
}
프로젝트 소스 코드와 이 글의 예제 프로젝트 모두 github에 있습니다.
stjeong / DxgiScreenCapture
; https://github.com/stjeong/DxgiScreenCapture
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]