次の方法で共有


XAppCaptureScreenshotStream

スクリーンショットのストリーミングを表します。

構文

typedef struct XAppCaptureScreenshotStream {  
} XAppCaptureScreenshotStream  

メンバー

この構造にはデータ メンバーは含まれていません。

解説

この構造を使用して、画面キャプチャを収集します。

XAppCaptureTakeScreenshot を呼び出すと、ゲームのスクリーンショットを撮ることができます。

XAppCaptureTakeScreenshot 1 つ以上のローカル ID を返します。これを使用して、XAppCaptureOpenScreenshotStream の呼び出しで渡すことにより、画面キャプチャを取得できます。 HDR 画面のスクリーンショットを撮ると 2 つのローカル ID が得られます。1 つは SDR バージョン用、もう 1 つは HDR バージョン用です。

XAppCaptureOpenScreenshotStreamXAppCaptureScreenshotStream オブジェクトへのハンドルを返します。 このハンドルを使用して、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