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