XAppCaptureOpenScreenshotStream

打开屏幕截图流。

语法

HRESULT XAppCaptureOpenScreenshotStream(  
         const char* localId,  
         XAppCaptureScreenshotFormatFlag screenshotFormat,  
         XAppCaptureScreenshotStreamHandle* handle,  
         uint64_t* totalBytes  
)  

参数

localId _In_
类型:char*

调用 XAppCaptureTakeScreenshot 后在 XAppCaptureTakeScreenshotResult 中返回的屏幕截图的本地 ID。

screenshotFormat _In_
类型:XAppCaptureScreenshotFormatFlag

调用 XAppCaptureTakeScreenshot 后在 XAppCaptureTakeScreenshotResult 中返回的屏幕截图格式标志。

handle _Out_
类型:XAppCaptureScreenshotStreamHandle*

作为打开流的结果返回的屏幕截图流句柄。

totalBytes _Out_opt_
类型:uint64_t*

流中的总字节数。

返回值

类型:HRESULT

函数结果。

备注

注意

在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程

无法从游戏分区访问屏幕截图,因此您必须打开一个流,才能检索由用户或使用 XAppCaptureTakeScreenshot 获取的屏幕截图。 XAppCaptureTakeScreenshot 在其结果中返回一个 LOCALID,用于在此函数检索正确的屏幕截图。 只要屏幕截图保留在磁盘上,localID 就有效。 主机上只有有限的空间可以存储屏幕截图。 填充分配的空间时,将删除较旧的屏幕截图。 这可能导致打开的屏幕截图函数错过 localID。 打开流后,您可以使用 XAppCaptureReadScreenShotStream 读取屏幕截图。 最后,每个流都需要使用 XAppCaptureCloseScreenshotStream 关闭以避免内存泄漏。

XAppCaptureTakeScreenshotResult takeScreenshotResult = {0};
XAppCaptureScreenshotStreamHandle handle = nullptr;
UINT64 totalBytesToRead = 0;
XAppCaptureScreenshotFormatFlag screenshotFormat = XAppCaptureScreenshotFormatFlag::SDR;
bool hdrAvailable = false;

/* ... obtain takeScreenshotResult with XAppCaptureTakeScreenshot. Refer to corresponding documentation ... */

hdrAvailable = static_cast<bool>(takeScreenshotResult.availableScreenshotFormats & XAppCaptureScreenshotFormatFlag::HDR);

/* Note: It is optional to obtain the HDR screenshot, if HDR is available. You will need to call XAppCaptureOpenScreenshotStream twice to obtain both SDR and HDR screenshots */
if (hdrAvailable)
{
    screenshotFormat = XAppCaptureScreenshotFormatFlag::HDR;
}

if (FAILED_LOG(XAppCaptureOpenScreenshotStream(takeScreenshotResult.localId, screenshotFormat, &handle, &totalBytesToRead)))
{
    return;
}

appLog.AddLog("%I64d bytes returned\n", totalBytesToRead);

/* You must always call XAppCaptureCloseScreenshotStream on an open XAppCaptureScreenshotStreamHandle to avoid a memory leak */
if (handle != nullptr)
{
    XAppCaptureCloseScreenshotStream(handle);
}

要求

头文件:XAppCapture.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

GameDVR 概述
XAppCapture 成员
XAppCaptureReadScreenShotStream
XAppCaptureTakeScreenshot
XAppCaptureCloseScreenshotStream