c# bitblt 예제

BitBlt 함수는 비트맵을 컨트롤에 빠르게 렌더링하는 데 사용할 수 있습니다(그리고 훨씬 더). 이를 위해 관리되는 대안인 Graphics.DrawImage()보다 훨씬 빠릅니다. 아래 예제 코드를 참조하십시오. 그래서 우리가 BitBlt를 사용할 수 있도록, 우리는 필요 2 장치 컨텍스트 (발음하기 어려운 아닌가요?) 이를 만들려면 먼저 그래픽 개체가 필요하며, 예를 들어 그림 상자를 사용할 수 있는 모든 오브젝트에서 그래픽 개체를 만듭니다. ControlPaint에는 일반적인 .NET 컨트롤을 그래픽 표면에 그릴 수 있는 정적 함수가 있습니다. 예를 들어 ControlPaint.DrawButton단추는 단추를 그립니다. 이전에 Graphics 개체의 DrawImage 메서드를 사용한 적이 있는 경우 이 호출은 매우 익숙해야 합니다 . 이는 원본과 대상 모두에 적용됩니다. 마지막으로 원본 장치 컨텍스트와 데이터가 복사되는 왼쪽 위 모서리와 데이터를 복사하는 방법을 자세히 설명하는 플래그를 전달합니다. 그 자체로, 그 메모리 DC는 크게 유용하지 않습니다 – 아직 수행 할 수있는 마지막 단계가 있습니다. GDI 비트맵을 만들고 할당해야 합니다.

이렇게 하려면 먼저 CreateCompatibleBitmap을 사용 하 여 비트 맵을 만든 다음 SelectObject를 사용 하 여 DC에 연결 합니다. SelectObject는 작업이 완료되면 복원해야 하는 관련 이전 개체(SelectObject를 다시 사용)도 반환합니다. 또한 DeleteObject를 사용하여 비트맵을 정리합니다. 향상된 메타파일이 기록될 때 소스 장치 컨텍스트에서 향상된 메타파일 장치 컨텍스트를 식별하는 경우 오류가 발생합니다. 따라서 장치 컨텍스트를 만들고 사용한 직후이 문서는 관련 소스 코드 및 파일과 함께 코드 프로젝트 오픈 라이센스 (CPOL)에 따라 라이센스가 부여되어 이미지 표현을 갖는 것이 매우 유용합니다. 개발자는 여러 가지 방법으로 이미지를 처리할 수 있습니다. 또 다른 점은 이미지를 다시 화면으로 그려 .NET 컨트롤의 그래픽을 처리하는 방법을 열어 줄 수 있다는 것입니다. 응용 프로그램에서 창을 캡처하려는 경우 양식의 경계 속성 값으로 Capture를 호출할 수 있습니다. 그러나 외부 창을 캡처하려면 Win32 API로 돌아가야 합니다. GetWindowRect 함수는 모든 창의 경계를 반환합니다. 우리가 지금해야 할 모든 우리의 대상 장치 컨텍스트를 만드는 것입니다, 그리고 메모리에서 BitBlt, 우리는 장치 컨텍스트의 배열을 유지할 수 있습니다, 그냥 규칙을 따르는 것을 기억! 메모리에 블리팅 후, 우리는 범위에 장치 컨텍스트를 유지해야, 우리가 메모리에 Blit 때, 우리가 장치 컨텍스트를 해제 한 후 변경 사항이 재설정되기 때문에. 따라서 MemoryHDC를 전역 변수로 유지하거나 동일한 프로시저에서 사용합니다.

이 문서의 기술에 대한 데모 프로그램은 아래 링크에서 확인할 수 있습니다. GitHub에서도 사용할 수 있습니다. 소스는 바탕 화면이 될 것입니다. GetWindowDC를 호출하면 기본적으로 잠금 장치가 있으므로 작업이 끝나면 해제해야 합니다. 또한 모니터 배열의 모든 세부 사항을 알 필요 없이 전체 데스크톱을 캡처 하는 것은 매우 간단 합니다. 사용 가능한 모니터를 등록하고 사각형.Union을 사용하여 두 사각형을 병합하기만 하면 됩니다. 이 완료되면 사용 가능한 모든 모니터를 설명하는 하나의 사각형이 있습니다. 사용 하는 Windows의 버전에 따라 Form.Bounds 또는 GetWindowRect를 호출할 때 약간 예기치 않은 결과가 발생할 수 있습니다.