본문 바로가기
web

c# 스크린 캡처 저장하기

by 애나 냥냥 2022. 12. 23.
반응형

웹 크롤러를 활용해서 원하는 자료가 있을 시 스크린 캡처 자료를 남기는 프로그램이 필요했는데
요즘 c# 으로 코드를 짠 게 언제더라? 생각하니 몇 년은 된 것 같다. 대부분 파이썬으로 간단하게 처리하다 보니
거의 쓰임이 없긴 없었지만, 이번에는 c#으로만들어봤다.
웹 크롤러 부분은 빼고 스크린 캡처 함수만 작성

 

기본적으로 기능 테스트만 할 거라서 테스트용 버튼을 하나 올려준다!
폼은 거의 버튼 하나만 들어가기 떄문에 폼 크기 설정은 300, 200으로 작게 설정하였다.

버튼을 클릭 시 기본 폼은 보이지 않은 상태에서 스크린 캡처 전체를 찍어야 하기 때문에
투명하게 폼을 변경하고 기준점을 변경해준 후 현재 윈도우 해상도 크기로 맞춰준다.

 

this.Opacity = 0; 
this.Location = new Point(0, 0);  
this.Size = Screen.PrimaryScreen.Bounds.Size;

현재 해상도 값을 변수에 저장한다.
비트맵 개체를 전체 크기로 설정한 후 이를 캡처해 저장

 

 var fullScreen = Screen.PrimaryScreen.Bounds;
 Bitmap Cap = new Bitmap(fullScreen.Width, fullScreen.Height);
 Graphics Save_sc = Graphics.FromImage(Cap);

이제 저장된 캡쳐본을 파일로 저장한다.

using (var Savefile = new SaveFileDialog()) { 
    Savefile.OverwritePrompt = true;// 덮어쓰기
    Savefile.FileName = @"c:\test\1.jpg";
    Cap.Save(Savefile.FileName, ImageFormat.Jpeg);

}

폼을 다시 보이게 하고 기존 크기로 다시 변경해준다.

this.Opacity = 1;
this.Size = new Size(300, 200);

함수 코드 전체

     private void func() {
            this.Opacity = 0;
            this.Location = new Point(0, 0);
            this.Size = Screen.PrimaryScreen.Bounds.Size;
            var fullScreen = Screen.PrimaryScreen.Bounds;
            Bitmap Cap = new Bitmap(fullScreen.Width, fullScreen.Height);
            Graphics Save_sc = Graphics.FromImage(Cap);
            Save_sc.CopyFromScreen(PointToScreen(new Point(0, 0)), new Point(0, 0), fullScreen.Size);
            using (var Savefile = new SaveFileDialog())
            {
                Savefile.OverwritePrompt = true;// 덮어쓰기
                string Fname = Path.GetRandomFileName();
                Savefile.FileName = @"c:\test2\"+ Fname+".jpg";
                Cap.Save(Savefile.FileName, ImageFormat.Jpeg);
                this.Opacity = 1;
                this.Size = new Size(300, 200);

            }

이제 테스트를 해보기 위해 버튼 클릭 이벤트에 연결해준다.

      private void button1_Click(object sender, EventArgs e)
        {
            func();         
       }

버튼을 누를 때 마다 설정한 폴더에 파일이 생성된다.

크롤링을 하면서 이제 저 함수를 호출하면 완료.

 

파이썬은 많은 오픈소스와 라이브러리가 장점이긴 하지만 콘다 설치 시 빌드를 하면 사용하지도 않는 패키지 때문에 만들고 다시 필요 패키지만 설치해서 코드를 재작성하는 경우도 종종 있는데 c#은 윈폼을 간단하게 활용할 수 있는 장점도 있지만 빌드를 하면 확실히 용량이 작아서 좋다. 

 

 

반응형

댓글