遇到了一个特殊需求:我们需要给特定的widget进行截图,该widget正在播放一个视频
新建一个UFunctionLibrary类,我们使用FSlateApplication类里面的TakeScreenShot()函数进行截图。
具体代码如下:
void UShotFunctionLibrary::ShotWidget(UWidget* Widget)
{TSharedRef <SWidget> TargetSWidget = Widget->TakeWidget();TArray<FColor> RawData;FIntVector OutSize;FSlateApplication& FSA= FSlateApplication::Get();bool bScreenShotSuccessful = FSA.TakeScreenshot(TargetSWidget, RawData, OutSize);if (bScreenShotSuccessful) {FString ScreenShotName = FPaths::ProjectSavedDir() + TEXT("ScreenShot.png");TArray<uint8> CompressedBitmap;FImageUtils::CompressImageArray(OutSize.X, OutSize.Y, RawData, CompressedBitmap);FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenShotName);}
}
注意,使用FSlateApplication类的时候,我们需要在build.cs文件内对Slate模块进行引用。否则会出现无法解析函数的error。