以前,我一直在尋找將UE4渲染的幀輸出到文件。虛幻引擎4:將渲染幀保存到內存
我成功地做到這一點,並在細節可以在this StackOverflow post
被發現了把框架文件的功能是:
FScreenshotRequest::RequestScreenshot(filename, false, false);
現在,而不是寫入文件,我想寫入內存。我不想寫入文件然後讀入內存。
我一直在挖掘源代碼,發現截圖正在製作中,但遇到了一些麻煩。
ViewportClient->ProcessScreenShots(this);
正在呼籲的UnrealClient.cpp
1012
線在此之後,我發現,實際上正在這裏生成的截圖:
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);
}
由於某種原因,bool bScreenshotSuccessful = GetViewportScreenShot(InViewport, Bitmap);
throw是一個Access violation reading location 0x0000000000000020.
異常。
我認爲錯誤有事情做這一行:
Viewport->ReadPixels(Bitmap, FReadSurfaceDataFlags(), ViewRect)
我已經TREID「googeling」什麼的「訪問衝突」是,似乎這是值得做的一個空指針或類似的東西,但我仍然無法弄清楚,因爲我對C++很陌生。
問題
我怎樣才能解決這個問題,使bScreenshotSuccessful
是真的嗎?
注意:我知道,那FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenShotName);
嘗試將其保存到文件中,儘管我說,是不是我想做的事,所以請忽略,如果我有位圖,我可以壓縮和流呢。