배경
스크린캐스팅 프로그램은 종종 최소한의 성능으로 화면 이벤트 캡처를 우선시합니다. 영향. GDI는 화면 캡처를 위한 널리 알려진 방법이므로 잠재적인 효율성 향상을 위해 다른 접근 방식도 고려할 가치가 있습니다. 이 문서의 목적은 가장 빠른 방법을 탐색하고 구현에 대한 통찰력을 제공하는 것입니다.
GDI의 대체 방법
Windows Media API 및 DirectX는 향상된 기능을 갖춘 대체 화면 캡처 옵션을 제공합니다. 성능. Windows Media API는 DirectShow를 활용하여 사용자 지정 캡처 필터를 만들 수 있습니다. DirectX는 Direct3D를 활용하여 낮은 수준의 그래픽 작업에 대한 액세스를 제공합니다.
하드웨어 가속 및 성능
하드웨어 가속을 비활성화하면 캡처 성능이 크게 향상될 수 있습니다. 이는 하드웨어 가속이 렌더링 작업을 전용 하드웨어로 오프로드하여 대기 시간이 발생할 수 있기 때문입니다. 하드웨어 가속을 우회함으로써 캡처 프로세스가 CPU에서 직접 발생하므로 지연이 줄어듭니다.
사용자 정의 캡처 드라이버
Camtasia와 같은 프로그램은 사용자 정의 캡처 드라이버를 사용하여 고속을 달성합니다. 화면 캡처. 이러한 드라이버는 낮은 수준에서 작동하여 그래픽 API 호출을 가로채고 시스템 RAM에서 직접 프레임을 읽습니다. 이는 느린 비디오 RAM 읽기 작업을 우회하여 효율성을 향상시킵니다.
백 버퍼와 프론트 버퍼 캡처
FRAPS는 기본 그래픽 API를 연결하고 백 버퍼. 백 버퍼는 최종 렌더링된 프레임을 저장하며, 이는 프론트 버퍼보다 액세스 속도가 빠릅니다. 이 기술을 사용하면 전체 화면 캡처가 필요하지 않아 성능이 더욱 최적화됩니다.
Direct3D 화면 캡처용 코드 샘플
다음은 Direct3D를 사용한 화면 캡처를 보여주는 코드 조각입니다. ㄷ :
void dump_buffer() { IDirect3DSurface9* pRenderTarget=NULL; IDirect3DSurface9* pDestTarget=NULL; const char file[] = "Pickture.bmp"; // sanity checks. if (Device == NULL) return; // get the render target surface. HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget); // create a destination surface. hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width, DisplayMde.Height, DisplayMde.Format, D3DPOOL_SYSTEMMEM, &pDestTarget, NULL); //copy the render target to the destination surface. hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget); // save its contents to a bitmap file. hr = D3DXSaveSurfaceToFile(file, D3DXIFF_BMP, pDestTarget, NULL, NULL); // clean up. pRenderTarget->Release(); pDestTarget->Release(); }
위 내용은 Windows에서 화면 캡처 최적화를 위한 가장 빠른 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!