C++ 非真实引擎4:将渲染帧保存到内存

C++ 非真实引擎4:将渲染帧保存到内存,c++,unreal-engine4,C++,Unreal Engine4,之前,我希望将UE4渲染的帧输出到文件 我设法做到了这一点,详情可在 将帧输出到文件的功能是: FScreenshotRequest::RequestScreenshot(filename, false, false); 现在,我想写入内存,而不是写入文件。我不想先写入文件,然后再读入内存 我一直在挖掘源代码,找到了制作截图的地方,但遇到了一些麻烦 ViewportClient->ProcessScreenShots(这个) 接下来,我发现屏幕截图实际上是在这里生成的: bScreensho

之前,我希望将UE4渲染的帧输出到文件

我设法做到了这一点,详情可在

将帧输出到文件的功能是:

 FScreenshotRequest::RequestScreenshot(filename, false, false);
现在,我想写入内存,而不是写入文件。我不想先写入文件,然后再读入内存

我一直在挖掘源代码,找到了制作截图的地方,但遇到了一些麻烦

ViewportClient->ProcessScreenShots(这个)unallclient.cpp的
1012
行调用code>

接下来,我发现屏幕截图实际上是在这里生成的:

bScreenshotSuccessful = GetViewportScreenShot(InViewport, Bitmap);
因此,在找到我认为需要的所有片段后,我尝试在自定义演员中重新创建它:

    UGameViewportClient* gameViewport = GEngine->GameViewport;
    FViewport* InViewport = gameViewport->Viewport;
    TArray<FColor> Bitmap;

    bool bScreenshotSuccessful = GetViewportScreenShot(InViewport, Bitmap);
    if (bScreenshotSuccessful){
        FIntVector Size(InViewport->GetSizeXY().X, InViewport->GetSizeXY().Y, 0);
        TArray<uint8> CompressedBitmap;
        FString ScreenShotName = TEXT("out.png");
        FImageUtils::CompressImageArray(Size.X, Size.Y, Bitmap, CompressedBitmap);
        FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenShotName);
    }

我已经“GoGoelEng'”,因为它是一个“访问违例”,它似乎是与空指针或类似的东西有关的,但我仍然无法理解这一点,因为我对C++是很新的。 问题

如何修复此问题,使
bscreenshotsuctive
为真


注意:我意识到
FFileHelper::SaveArrayToFile(CompressedBitmap,*ScreenShotName)尝试保存到文件,尽管我说这不是我想要做的,所以请忽略这一点,因为如果我有位图,我可以压缩和流式处理它。

您的ViewRect只有三个点,而不是四个点,格式错误。请尝试以下代码段:

FIntRect Rect(0, 0, InViewport->GetSizeXY().X, InViewport->GetSizeXY().Y);
bScreenshotSuccessful = GetViewportScreenShot(InViewport, Bitmap, Rect);
FIntRect Rect(0, 0, InViewport->GetSizeXY().X, InViewport->GetSizeXY().Y);
bScreenshotSuccessful = GetViewportScreenShot(InViewport, Bitmap, Rect);