2014-04-28 2 views
0

메인 윈도우의 스크린 샷과 메인 윈도우의 내용을 캡처하려고합니다. MainWindow는 때로는 다른 요소 뒤에 있기 때문에 다른 오버레이 요소없이 화면 캡처를해야합니다. 이 코드는 현재 내용없이 빈 MainWindow 형식의 비트 맵을 반환합니다. 이 폼에는 다양한 동적 UI 요소가 있습니다. MainWindow의 현재 캡쳐 화면을 캡처하려면 어떻게해야합니까? MainWindow 내용에 대한 코드는 오래 게시 할 수 있으므로이 정도면 충분합니다.양식의 폼 및 요소 캡처 스크린 샷 캡처

Rectangle bounds = new Rectangle(); 
bounds.Width = Program.MainWindow.Width; 
bounds.Height = Program.MainWindow.Height; 

screenShot = new Bitmap(Program.MainWindow.Width, 
         Program.MainWindow.Height, 
         PixelFormat.Format32bppRgb); 
Program.MainWindow.DrawToBitmap(screenShot, bounds); 
+1

CopyFromScreen 방법을 사용하여 얻을 수 있어야합니다 당신은'은'graphics' 클래스의()'회원 CopyFromScreen 봤어? – pinkfloydx33

+0

네, 그래도 검은 비트 맵을 얻을 수 있습니다. – Yuval

+0

Ok, 그냥 CopyFromScreen()이 작동합니다.하지만 MainWindow 폼 만 캡쳐하고 스크린 샷을 찍을 때 프로세스에서 열리는 두 개의 다른 폼은 캡처하지 않도록하고 싶습니다. 어떤 아이디어? – Yuval

답변

1

당신은 Graphics 클래스

 Rectangle bounds = Program.MainWindow.Bounds; 
     Bitmap b = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb); 
     using (Graphics g = Graphics.FromImage(b)) 
     { 
      g.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy); 
     } 
     b.Save("YOUR FILE NAME HERE"); 
+0

이것은 경계의 스크린 샷을 캡처하지만 어떤 경우 백그라운드에있을 것 인 MainWindow의 스크린 샷을 원합니다. – Yuval

+0

배경에 있다면 슛을 할 수 없습니다. 포 그라운드에서 올라와 있어야합니다. 그렇지 않으면 복사 할 수 없습니다. 양식의 그래픽 객체를 사용하여 주위를 둘러 볼 수도 있지만 그래도 작동하지는 않습니다. – pinkfloydx33

+0

절반이 문제를 해결했습니다. 나는 mainwindow 위에 열려있는 폼 요소를 반복하고 불투명도를 0으로 설정 한 다음 CopyFromScreen을 수행하고 불투명도를 1로 다시 설정했습니다.이 작업을 수행하는 좋은 방법은 아니지만 확실합니다. 더 나은 방법이지만, 지금은 이것이 작동합니다. 도와 주셔서 감사합니다. – Yuval

관련 문제