XAppCaptureScreenshotStream
表示屏幕截图流。
语法
typedef struct XAppCaptureScreenshotStream {
} XAppCaptureScreenshotStream
成员
此结构不包含数据成员。
备注
使用此结构收集屏幕捕获。
可以通过调用 XAppCaptureTakeScreenshot 来截取游戏屏幕截图。
XAppCaptureTakeScreenshot
返回一个或多个本地 ID,可以通过调用 XAppCaptureOpenScreenshotStream 来使用该 ID 检索屏幕捕获。 如果截取 HDR 屏幕的截图,將会得到两个本地 ID:一个用于 SDR 版本,一个用于 HDR 版本。
XAppCaptureOpenScreenshotStream
返回 XAppCaptureScreenshotStream
对象的句柄。 可以使用此句柄通过调用 XAppCaptureReadScreenshotStream 来读取流的内容。
完成后,调用 XAppCaptureCloseScreenshotStream 来关闭句柄。
示例
下面的代码示例演示如何将屏幕截图流的内容写入本地文件。
void WriteScreenshotStreamToFile(_In_ const char* screenshotLocalId, _In_ XAppCaptureScreenshotFormatFlag screenshotFormat, _In_ const char* filePath)
{
const int MAX_DATA = 1024;
XAppCaptureScreenshotStreamHandle handle = nullptr;
BYTE buffer[MAX_DATA];
HANDLE file = INVALID_HANDLE_VALUE;
UINT64 totalBytesRead = 0;
UINT64 totalBytesToRead = 0;
if (FAILED_LOG(XAppCaptureOpenScreenshotStream(screenshotLocalId, screenshotFormat, &handle, &totalBytesToRead)))
{
return;
}
appLog.AddLog("%I64d bytes returned\n", totalBytesToRead);
file = CreateFileA(filePath, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (file == INVALID_HANDLE_VALUE)
{
appLog.AddLog("Could not create %s\n", filePath);
goto Cleanup;
}
while (totalBytesRead < totalBytesToRead)
{
uint32_t bytesRead = 0;
DWORD bytesWritten = 0;
if (FAILED_LOG(XAppCaptureReadScreenshotStream(handle, totalBytesRead, sizeof(buffer), buffer, &bytesRead)))
{
goto Cleanup;
}
BOOL result = WriteFile(file, buffer, bytesRead, &bytesWritten, NULL );
if (!result)
{
appLog.AddLog("Failed to write to %s\n", filePath);
goto Cleanup;
}
totalBytesRead += bytesRead;
}
Cleanup:
if (handle != nullptr)
{
FAILED_LOG(XAppCaptureCloseScreenshotStream(handle));
}
if (file != INVALID_HANDLE_VALUE)
{
CloseHandle(file);
}
appLog.AddLog("Wrote out %I64d bytes to %s\n", totalBytesRead, filePath);
}
要求
头文件:XAppCapture.h
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XAppCapture 成员
XAppCaptureTakeScreenshot
xappcapturescreenshotformatflag