这适用于非真实引擎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,使用了一个名为"FreeImage“的库。
我不想修改UE4源代码,我正在寻找一种“钩子”到UE4并“捕获”框架的方法。
我在开放式广播软件中成功地做到了这一点,但我想在UE4中通过c++或蓝图进行本机操作。
我也知道我可以从编辑那里做这个,但这不是我想要做的。我想在运行时自动完成这个任务。
我该怎么做呢?有可能吗?
发布于 2015-11-03 11:16:46
对于任何想这样做的人来说,你有几个选择。
选项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);
}以下是关于FScreenshotRequest的文档
https://stackoverflow.com/questions/33488681
复制相似问题