用directX截屏,截取到屏幕播放视频区域是黑色,如何解决,多谢
用directX截屏,截取到屏幕播放视频区域是黑色,怎么解决,谢谢!
{ HRESULT hr;
// Get adapter display mode
D3DDISPLAYMODE mode;
if (FAILED(hr = lpDevice->GetDisplayMode(0, &mode)))
return hr;
// Create the surface to hold the screen image data
LPDIRECT3DSURFACE9 surf;
if (FAILED(hr = lpDevice->CreateOffscreenPlainSurface(mode.Width,
mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surf, NULL))) //注意第四个参数不能是D3DPOOL_DEFAULT
{
return hr;
}
// Get the screen data
if (FAILED(hr = lpDevice->GetFrontBufferData(0, surf)))
{
surf->Release() ;
return hr ;
}
// area to capture
RECT *rect = NULL ;
WINDOWINFO windowInfo ;
windowInfo.cbSize = sizeof(WINDOWINFO) ;
if(hWnd) // capture window
{
GetWindowInfo(hWnd, &windowInfo) ;
rect = &windowInfo.rcWindow ;
}
// Save the screen date to file
hr = D3DXSaveSurfaceToFile("123.bmp", D3DXIFF_BMP, surf, NULL, rect);
surf->Release() ;
return hr ;
}
上面的代码能实现截取屏幕,但是如果屏幕中有视频在播放时,截取到屏幕中播放视频的区域是黑色的,请问怎么解决,求指点,谢谢!
------解决方案--------------------
视频一般使用 DirectShow 硬件加速,截屏是截不到的。
------解决方案--------------------
使用了overlay的硬件加速模式.
解决方式:
1.关闭硬件加速
2.使用hook.
更多的方式暂时没想到
{ HRESULT hr;
// Get adapter display mode
D3DDISPLAYMODE mode;
if (FAILED(hr = lpDevice->GetDisplayMode(0, &mode)))
return hr;
// Create the surface to hold the screen image data
LPDIRECT3DSURFACE9 surf;
if (FAILED(hr = lpDevice->CreateOffscreenPlainSurface(mode.Width,
mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surf, NULL))) //注意第四个参数不能是D3DPOOL_DEFAULT
{
return hr;
}
// Get the screen data
if (FAILED(hr = lpDevice->GetFrontBufferData(0, surf)))
{
surf->Release() ;
return hr ;
}
// area to capture
RECT *rect = NULL ;
WINDOWINFO windowInfo ;
windowInfo.cbSize = sizeof(WINDOWINFO) ;
if(hWnd) // capture window
{
GetWindowInfo(hWnd, &windowInfo) ;
rect = &windowInfo.rcWindow ;
}
// Save the screen date to file
hr = D3DXSaveSurfaceToFile("123.bmp", D3DXIFF_BMP, surf, NULL, rect);
surf->Release() ;
return hr ;
}
上面的代码能实现截取屏幕,但是如果屏幕中有视频在播放时,截取到屏幕中播放视频的区域是黑色的,请问怎么解决,求指点,谢谢!
------解决方案--------------------
视频一般使用 DirectShow 硬件加速,截屏是截不到的。
------解决方案--------------------
使用了overlay的硬件加速模式.
解决方式:
1.关闭硬件加速
2.使用hook.
更多的方式暂时没想到