当前位置: 首页 > article >正文

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);
	}
	
}


http://www.kler.cn/a/400478.html

相关文章:

  • 解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
  • 远程jupyter lab的配置
  • 对PolyMarket的突袭
  • IDEA旗舰版编辑器器快速⼊门(笔记)
  • 开源项目低代码表单设计器FcDesigner获取表单的层级结构与组件数据
  • vscode文件重定向输入输出(竞赛向)
  • kubernetes如何配置默认存储
  • Spark RDD sortBy算子什么情况会触发shuffle
  • uni-app页面跳转
  • 初级数据结构——栈题库(c++)
  • Linux网络:HTTPS协议
  • Springboot3.3.5 启动流程之 tomcat启动流程介绍
  • Springmvc配置文件application.xml 和 spring-servlet.xml
  • libaom 源码分析:AV1 帧内非方向预测模式
  • HarmonyOS知识点
  • JsonObject (JSON 数据中的一个对象)
  • Seatunnel解决Excel中无法将数字类型转换成字符串类型以及源码打包
  • SpringMVC跨线程获取requests请求对象(子线程共享servletRequestAttributes)和跨线程获取token信息
  • Matlab单输入多输出之同时识别手写数字类别和倾斜角度
  • 用 Android Studio 从零开发一个多功能计算器应用
  • 集群聊天服务器(9)一对一聊天功能
  • 数据科学与SQL:如何计算排列熵?| 基于SQL实现
  • 10月回顾 | Apache SeaTunnel社区动态与进展一览
  • 【jvm】方法区的理解
  • 讨论大语言模型在学术文献应用中的未来与所带来的可能性和担忧
  • C++笔试面试题