2010-01-07 2 views
2

관리되는 Graphics.CopyFromScreen 메서드를 사용하여 화면의 영역에 대한 Bitmap 스크린 샷을 찍습니다.CopyFromScreen을 통해 둘 이상의 CopyPixelOperation을 보내는 방법은 무엇입니까?

CopyFixScreen 메서드의 플래그로 CopyPixelOperation.SourceCopy 열거 형을 사용하여 모든 작업이 진행 중입니다.하지만 불행히도 캡처하려고하는 영역에있는 계층화 된/투명 창을 캡처해야합니다. SourceCopy 열거 형이 결과 이미지에서 선택되지 않습니다. 이것은 CopyPixelOperation.CaptureBlt를 사용하여 해결할 수 있습니다 ...하지만이 할 수있는 방법 찾을 수 없습니다 :

Graphics.CopyFromScreen(left, top, 0, 0, size, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt); // note the binary OR operator 

... 이것은 결과 "비트 단위 또는 형의 열거에 수 없습니다"로 스타일을 Resharper의 오류 - 열거 형에 대한 비트 연산이 열거 형 값의 숫자 표현에서 발생한다는 것을 발견하고 사용 가능한 열거 형 값 중 다른 하나 (두 개는 반대)로 끝나는 것을 발견 한 오류를 조사했습니다.

이 함수 또는 이와 유사한 함수에 두 개의 enum을 전달할 수있는 방법이 있습니까? 가능한 경우 관리를 유지하는 것이 좋습니다.


MSDN 문서

+1

CopyFromScreen에는 GDI 핸들 누수가 있습니다. 이는 응용 프로그램에서이 메서드를 여러 번 반복해서 호출하면 안되며, 결국 응용 프로그램과 가능한 다른 응용 프로그램을 처리하지 못하게됩니다. 이 버그는 여전히 .NET 3.5 SP1에 존재합니다. –

+0

코드 컴파일에 전혀 문제가 없습니다. – Coincoin

+0

Lasse : 나는 그것을 실제로 계속해서 반복적으로 부르고있다 ... 지혜의 덩어리에 감사한다 !! 당신이 수정 프로그램을 볼 수있는 '장소'(뉴스 레터, 블로그, msdn 페이지)가 있는지 알고 계십니까? 아니면 .NET 4가 될 것이라고 가정해야합니까? – InvertedAcceleration

답변

0

:

copyPixelOpera
형식 : System.Drawing .. ::. CopyPixelOperation
중 하나이며 CopyPixelOperation 값입니다.

당신은 그 플래그를 결합 할 수 없습니다, 당신은 아마 어쨌든 혼자 CopyPixelOperation.CaptureBlt를 사용하고 싶습니다.

+0

CopyFromScreen의 핸들 누수에 대한 Lasse의 의견을 바탕으로 관리되지 않는 경로를 벗어났습니다. 또한 문서에서 선택한 '제한 중 하나'를 피해 가려고했습니다. 도움 주셔서 감사합니다. – InvertedAcceleration

관련 문제