Skip to content

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