这适用于虚幻引擎4.9
每一帧,我都希望将其保存到文件中(覆盖现有文件)。
对于我制作的简单D3D11演示,我已经能够做到:
void Engine::CaptureFrame(D3DX11_IMAGE_FILE_FORMAT format, const LPCTSTR fileName){
backbuffer->GetResource(&resource);
ID3D11Texture2D* texture;
HRESULT hResult = resource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<LPVOID*>(&texture));
D3DX11SaveTextureToFile(deviceContext, texture, format, fileName);
//Clean up
texture->Release();
resource->Release();
}
我也使用OpenGL,使用名为&#34; FreeImage&#34;的库。
我不想修改UE4来源,我正在寻找一种方法来解决问题。进入UE4和&#34;捕获&#34;框架。
我已设法使用Open Broadcasting Software执行此操作,但我希望通过c ++或蓝图在UE4内本地执行此操作。
我也知道I can do this from the editor,但这不是我想要做的。我想在运行时自动执行此操作。
我该如何解决这个问题?它甚至可能吗?
答案 0 :(得分:5)
对于任何想要这样做的人,你有几个选择。
选项A
如果您不关心生成多少个截图文件而不关心它们的名称,那么您可以使用蓝图:
图像将输出到\Unreal Projects\ProjectName\Saved\Screenshots\Windows
,其中ProjectName
是项目的名称。
选项B
如果您不想要多个屏幕截图文件并需要控制它们的去向,那么您可以通过代码执行此操作:
//Called every frame
void AMyDempActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
FString filename = "test.png";
FScreenshotRequest::RequestScreenshot(filename, false, false);
}
的文档