ElaDxgiManager 组件文档
概述
ElaDxgiManager 是一个基于 DXGI 的屏幕捕获管理器,专门用于 Windows 平台。它提供了高性能的屏幕捕获功能,支持多显卡、多显示器,并可以自定义捕获区域和帧率。
特性
- 多显卡支持
- 多显示器支持
- 自定义捕获区域
- 可调节帧率
- 异步捕获
- 实时预览
- 自动设备选择
- 超时控制
主要组件
ElaDxgiManager
单例管理器,负责屏幕捕获的核心功能。
ElaDxgiScreen
用于显示捕获内容的预览窗口组件。
公共方法
设备管理
cpp
// 获取显卡列表
QStringList getDxDeviceList() const;
// 获取显示器列表
QStringList getOutputDeviceList() const;
// 设置显卡
bool setDxDeviceID(int dxID);
// 设置显示器
bool setOutputDeviceID(int deviceID);捕获控制
cpp
// 开始捕获
void startGrabScreen();
// 停止捕获
void stopGrabScreen();
// 获取捕获状态
bool getIsGrabScreen() const;
// 获取当前帧
QImage grabScreenToImage() const;参数设置
cpp
// 设置捕获区域(中心扩展)
void setGrabArea(int width, int height);
// 设置捕获区域(指定位置)
void setGrabArea(int x, int y, int width, int height);
// 设置帧率
void setGrabFrameRate(int frameRateValue);
// 设置超时时间
void setTimeoutMsValue(int timeoutValue);使用示例
基础用法
1. 初始化和设备选择
cpp
// 获取管理器实例
ElaDxgiManager* dxgiManager = ElaDxgiManager::getInstance();
// 设置捕获区域
dxgiManager->setGrabArea(1920, 1080);
// 创建预览窗口
ElaDxgiScreen* dxgiScreen = new ElaDxgiScreen(this);
dxgiScreen->setIsSyncGrabSize(true);
// 设置设备选择下拉框
ElaComboBox* dxComboBox = new ElaComboBox(this);
dxComboBox->addItems(dxgiManager->getDxDeviceList());
dxComboBox->setCurrentIndex(dxgiManager->getDxDeviceID());
ElaComboBox* outputComboBox = new ElaComboBox(this);
outputComboBox->addItems(dxgiManager->getOutputDeviceList());
outputComboBox->setCurrentIndex(dxgiManager->getOutputDeviceID());2. 设备切换处理
cpp
// 显卡切换
connect(dxComboBox,
QOverload<int>::of(&ElaComboBox::currentIndexChanged),
this, [=](int index) {
dxgiManager->setDxDeviceID(index);
// 更新显示器列表
outputComboBox->clear();
outputComboBox->addItems(
dxgiManager->getOutputDeviceList());
outputComboBox->setCurrentIndex(
dxgiManager->getOutputDeviceID());
dxgiScreen->update