Windows编程工作总结4-图形图像

GDI

注意Direct 3D部分,将有专门的文档介绍。

参考资料

  • 官方资料:https://docs.microsoft.com/en-us/windows/win32/gdi/windows-gdi。
  • <<windows图形编程>> 2002年出版。

概念

  • 枚举窗口:获取窗口的信息。

几个模块的理解

/**
 *@brief 在指定窗口中添加更新区域。
 *@note1:无效区域(invalidated area)窗口的更新区域不断积累
         (随着InvalidateXXX的调用),直到ValidateXXX调用或
         下一个WM_PAINT发生。
 *@note2:当前更新区域为非空,且应用程序消息队列中没有其他消息,
         系统向相应的窗口发送WM_PAINT消息。
 */
BOOL InvalidateRect(
  //指定窗口句柄。
  [in] HWND       hWnd,
  //指定矩形区域。
  [in] const RECT *lpRect,
  //true:绘制前擦除更新区域的背景。
  [in] BOOL       bErase
);

/**
 *@brief 将指定区域添加到更新区域。
         其他和InvalidateRect相同。
 */
BOOL InvalidateRgn(
  [in] HWND hWnd,
   //所要添加区域的句柄
  [in] HRGN hRgn,
  [in] BOOL bErase
);

GDI+

https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-gdi-start。

GDI+和GDI

  • 使用dumpbin分析。GDI+(gdiplus.dll)依赖GDI(gdi32.dll)。即GDI+是在基础上的封装。

DXGI

官方资料: https://docs.microsoft.com/zh-cn/windows/win32/direct3ddxgi/dx-graphics-dxgi。

IDXGIOutputDuplication接口函数

HRESULT AcquireNextFrame(
  //最大等待时间间隔。
  [in]  UINT                    TimeoutInMilliseconds,
  //当前帧时间和显示信息。
  [out] DXGI_OUTDUPL_FRAME_INFO *pFrameInfo,
  //包括桌面图像的结构体指针
  [out] IDXGIResource           **ppDesktopResource
)
  • 只有桌面内容更新,或指针形状位置更新时,才能获取图像。(MSDN)。经过视博云-中间件-桌面采集实验,画面活动的越剧烈,一秒钟采集的图像越多。
  • 如果超时,返回的ppDesktopResource为NULL,没有意义。
  • 如果超时,新的桌面图像是无效的。
//表示应用程序已经完成帧的处理,释放资源。
HRESULT ReleaseFrame();
  • 与AcquireNextFrame()配合使用。
  • 当AcquireNextFrame(),没有必要调用ReleaseFrame()。因为根据实际测试,在这种情况下调用返回值为DXGI_ERROR_INVALID_CALL。
  • 为了性能的问题,在调用AcquireNextFrame()之前调用ReleaseFrame,而且间隔时间尽可能的短。

IDXGIFactory1

EnumAdapters1

//枚举指定的显卡
HRESULT EnumAdapters1(
        //指定显卡的索引。
        UINT          Adapter,
        //输出的显卡接口指针。
        //既可以是有输出的,也可以是没有输出的。
  [out] IDXGIAdapter1 **ppAdapter
);
  • 可以理解为,根据显卡序号,获取相应显卡的接口。

IDXGIOutput

WaitForVBlank()

//暂停线程,直到下一个垂直空白。当显示光栅从右下角移动到左上角以开始绘制下一帧时,会出现垂直空白。
HRESULT WaitForVBlank();

WaitForVBlank()用于等待Vsync显示模式被设置,具体详见https://docs.microsoft.com/en-us/previous-versions/windows/hardware/wlk/ff568863(v=vs.85)。屏幕采集必须在Vsync模式下进行,否则可能出现屏幕撕裂的现象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值