BitBlt
을 통해 화면 영역을 캡처하는 프로그램이 있습니다. 오늘 테스트를 진행하면서 화면 영역에 Windows Media Player의 일부가 포함되어있을 때 회색 부분이 있다는 것을 알게되었습니다. 나머지 영역은 비트 맵에 성공적으로 복사됩니다.Win32 C++ 프로그래밍에서 Windows Media Player가 포함 된 화면 영역을 복사하려면 BitBlt()를 어떻게 수행합니까?
여기서 I 화면의 섹션을 캡처하는 데 사용하는 코드 단편이다 :
HDC hdc = ::GetDC(NULL); // get the desktop device context
HDC hDest = CreateCompatibleDC(hdc); // create a device context to use
// set the height and width of the region
int height = 800;
int width = 600;
// create a bitmap
HBITMAP hbDesktop = CreateCompatibleBitmap(hdc, width, height);
// use the previously created device context with the bitmap
SelectObject(hDest, hbDesktop);
// copy from the desktop device context (x=100,y=100) to the bitmap device context
BitBlt(hDest, 0, 0, width, height, hdc, 100, 100, SRCCOPY);
이 코드는 스크린의 포인트 (100, 100)에서 시작하여 크기 800 × 600의 화면 영역을 캡처한다.
미디어 플레이어에서이 지역의 어딘가에서 동영상을 재생할 때 출력되는 비트 맵에 들어가면 동영상 플레이어의 콘텐츠 대신 회색 영역이 표시됩니다.
동영상 플레이어가 포함되어있는 경우 BitBlt
에 화면 영역이 생길 수 있습니까? Media Player가 다른 Windows 응용 프로그램과 다르게 화면에 내용을 표시하기 때문입니까?
샘플 동영상을 재생하는 윈도우 미디어 플레이어를 (Alt-PrtScrn) 캡처 할 수 있으므로 Alt-PrtScrn을 사용하면 화면 영역을'BitBlt '할 수 있습니까? 아니면 뭔가 특별한 일을하는 Alt-PrtScrn입니까? –
와우 그게 재미 있어요. 운영 체제가 그대로 화면을 포함하는 버퍼를 가지고 있다고 생각했습니다. – bodacydo
가끔 있습니다. 그러나 비디오 플레이어의 경우, 미디어 플레이어 데이터가 그래픽 카드에만 여러 번 존재합니다 (그리고 OS는 그래픽 카드에 오버레이를 수행 할 위치를 알려줍니다). OS 버퍼는 (컬러 키) 오버레이 영역만을 갖는다. –