自学内容网 自学内容网

UE5.2 C++ 实现拍照功能-带UI截图

整理了下,结合知乎上的一篇分享和自己的理解,最后总结出的一份带UI截图的代码,因为开发时间跨度有点大,中间有几天去玩游戏了,忘记之前参考的网页了,如果有知道的,欢迎留言补充。

头文件:

UFUNCTION(BlueprintCallable, Category= "PuzzleFunction")
static void TackShot(const UObject* World, FString FileName);

CPP文件: 

void UPuzzleFunctionLibrary::TackShot(const UObject* World, FString FileName)
{
if (!GetPuzzleHud(World)->MainUI)
{
return;
}

// 获取主UI的指针
TSharedRef<SWidget> MainUI = GetPuzzleHud(World)->MainUI->TakeWidget();

// 准备用于存储原始数据和输出尺寸的变量
TArray<FColor> RawData;
FIntVector OutSize;
// 尝试截取屏幕快照
bool bScreenshotSuccessful = FSlateApplication::Get().TakeScreenshot(MainUI, RawData, OutSize);
if (bScreenshotSuccessful)
{
// 构建保存截图的文件名
FString ScreenShotName = FPaths::Combine(FPaths::ProjectSavedDir(), TEXT("Images"), FileName);
// 确保目录存在
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
FString DirectoryPath = FPaths::GetPath(ScreenShotName);
if (!PlatformFile.DirectoryExists(*DirectoryPath))
{
PlatformFile.CreateDirectory(*DirectoryPath);
}
// 压缩图像数据
TArray<uint8> CompressedBitmap;
FImageUtils::ThumbnailCompressImageArray(OutSize.X, OutSize.Y, RawData, CompressedBitmap);
// 将压缩后的图像数据保存到文件
FFileHelper::SaveArrayToFile(CompressedBitmap, *ScreenShotName);
}

}


原文地址:https://blog.csdn.net/qq_34970171/article/details/143783207

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!