Раньше я искал вывод кадров, отображаемых UE4 в файл.Unreal Engine 4: сохранение выделенного кадра в память
мне удалось это сделать, и детали могут быть найдены в this StackOverflow post
Функция, чтобы из положить рамку в файле:
FScreenshotRequest::RequestScreenshot(filename, false, false);
Теперь, вместо того, чтобы писать в файл, я хотел бы для записи в память. Я не хочу писать в файл, а затем читать в памяти.
Я искал исходный код и обнаружил, где сделаны скриншоты, но у меня проблемы.
ViewportClient->ProcessScreenShots(this);
вызывается на линии 1012
из UnrealClient.cpp
После этого, я обнаружил, что скриншот фактически генерируется здесь:
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);
бросок s a Access violation reading location 0x0000000000000020.
исключение.
Я думаю, что ошибка имеет что-то делать с этой линией:
Viewport->ReadPixels(Bitmap, FReadSurfaceDataFlags(), ViewRect)
Я трейд «googeling» за что такое «Нарушение прав доступа» есть, и кажется, что это что-то делать с нулем указатель или что-то в этом роде, но я все еще не могу понять это, поскольку я довольно новичок в C++.
Вопрос
Как я могу это исправить, так что bScreenshotSuccessful
верно?
ПРИМЕЧАНИЕ: Я понимаю, что FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenShotName);
попытки сохранить файл, несмотря на мне, говоря, что это не то, что я хочу сделать, поэтому не обращайте внимания, что, как будто у меня есть растровое изображение, я могу сжать и поток.