다음을 통해 공유


XAppCaptureScreenshotStream

스크린샷 스트림을 나타냅니다.

구문

typedef struct XAppCaptureScreenshotStream {  
} XAppCaptureScreenshotStream  

멤버

이 구조체는 데이터 멤버를 포함하지 않습니다.

설명

이 구조체를 사용하여 화면 캡처를 수집합니다.

XAppCaptureTakeScreenshot을 호출하여 게임의 스크린샷을 찍을 수 있습니다.

XAppCaptureTakeScreenshot은(는) 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