You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP C++/CX中如何从SoftwareBitmap创建Direct3D11CaptureFrame?

从SoftwareBitmap创建带Surface的Direct3D11CaptureFrame?

直接创建Direct3D11CaptureFrame不可行

Direct3D11CaptureFrame是Windows图形捕获框架内部生成的对象,没有公开的构造函数或创建方法,无法直接从SoftwareBitmap实例化这个类。它的Surface是系统捕获流程中绑定的Direct3D资源,和捕获会话的上下文强关联,外部代码无法手动构造出符合框架要求的Direct3D11CaptureFrame实例。

针对水印录制需求的替代方案

你的核心需求是在捕获录制时给帧添加水印,不需要构造Direct3D11CaptureFrame,推荐以下两种更高效的处理方式:

方案一:GPU端直接处理Surface(性能优先)

避免将Surface转换到CPU端的SoftwareBitmap(会带来额外的内存拷贝和性能开销),直接在GPU上操作捕获到的Surface:

  • 从Direct3D11CaptureFrame.Surface获取对应的ID3D11Texture2D接口
  • 创建Direct2D设备上下文,将该纹理设置为渲染目标
  • 使用Direct2D的API直接在渲染目标上绘制水印(文本、图像均可)
  • 处理后的纹理可直接传入录制组件(比如MediaCapture或自定义编码器)

方案二:将处理后的SoftwareBitmap转回Direct3D纹理

如果已经在CPU端通过SoftwareBitmap完成了水印处理,需要将其转换为Direct3D纹理后再用于录制:

  • 创建与SoftwareBitmap像素格式、尺寸匹配的ID3D11Texture2D(注意设置正确的显存访问权限)
  • 调用SoftwareBitmap.CopyToBufferAsync将像素数据复制到纹理的显存缓冲区
  • 将这个纹理传入录制流程,替代原始的捕获帧Surface

内容的提问来源于stack exchange,提问作者oskar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:54:58