UE5 C++ 读取图片插件(一)
原来UE可以使用 static,之前不知道,一用就报错。
static TSharedPtr<IImageWrapper> GetImageWrapperByExtention(const FString InImagePath); //智能指针,方便追寻引用C++,加载ImageWrapperstatic UTexture2D* LoadTexture2D(const FString& ImagePath,bool &IsValid,int32& OutWidth,int32& OutHeight); //加Const 为输入参数 ,不加为输出参数static void GetTextureFullNamesByPath(TArray<FString>&FileNames,const FString Path,EImageType ImageType);UFUNCTION(BlueprintCallable,Category = "GWX|TextureReader")static void GetTextureByPath(TArray<FTextureDetail>&Textures,FString FilePath,EImageType ImageType = EImageType::PNG);
GetTextureByPath 可以在关卡蓝图里被调用。但如果没有static,在关卡蓝图就调用不了。

C++ 插件开发
- 创建函数库插件 配置模块创建变量
1.打开Plugins,点击左上角Add添加

2.这次我们选择创建蓝图库,方便蓝图中进行调取。插件启动时,注册运行这个模块。

3.ImageWrapper图像总的模块类。Core,UMG。

3.在TextureReaderBPLibrary.h里,添加需要使用的头文件。
#include "IImageWrapper.h" //图像信息的方法#include "IImageWrapperModule.h" //图片相关信息的模块#include "Engine/Texture2D.h"#include "CoreMinimal.h" //#include "Kismet/BlueprintFunctionLibrary.h"
4.接着创建两个枚举。用于图片类型,路径类型。UMETA 别名
UENUM(BlueprintType)
enum class EImageType :uint8
{JPG UMETA(DisplayName = "JPG"),PNG UMETA(DisplayName = "PNG"),BMP UMETA(DisplayName = "BMP"),TIFF UMETA(DisplayName = "TIFF")
};UENUM(BlueprintType)
enum class EPathType :uint8
{ABSOLUTE UMETA(DisplayName = "ABSOLUTE"),RELATIVE UMETA(DisplayName = "RELATIVE")
};
5.结构体用于区分,每个图片的具体信息。结构体名称不仅要F开头,而且要像个UE的类一样声明如下,可读可写。图片高和宽。
USTRUCT(BlueprintType) //F开头struct FTextureDetail{GENERATED_USTRUCT_BODY()UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "ZGD|TextureReader")UTexture2D* Texture;UPROPERTY(EditAnywhere, BlueprintReadWrite,Category = "ZGD|TextureReader")int32 Width;UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "ZGD|TextureReader")int32 Height;};
6.先声明需要这些,参数方法。在BlueprintLibrary中用static全局函数,这样在蓝图中可以直接去调用非常方便。智能指针,虚幻底层包含原生C++,智能指针可以包裹原生C++。在虚幻进行 引用计数 和 垃圾回收 很方便追寻,并且平台融合很好。
UCLASS()class UTetureReaderBPLibrary : public UBlueprintFunctionLibrary{GENERATED_UCLASS_BODY()UFUNCTION(BlueprintCallable, meta = (DisplayName = "Execute Sample function", Keywords = "TetureReader sample test testing"), Category = "TetureReaderTesting")static float TetureReaderSampleFunction(float Param); //自带的静态public:static TSharedPtr<IImageWrapper> GetImageWrapperByExtention(const FString InImagePath); //智能指针,方便追寻引用C++,加载ImageWrapperstatic UTexture2D* LoadTexture2D(const FString& ImagePath, bool& IsValid, int32& OutWidth, int32& OutHeight); //加Const 为输入参数 ,不加为输出参数};
7.图片加载,加载模块ImageWrapper(build.cs里添加的模块)。判断尾部,在返回对应的相关信息。
TSharedPtr<IImageWrapper> UTetureReaderBPLibrary::GetImageWrapperByExtention(const FString InImagePath)
{IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper")); //找到ImageWrapper这个模块if (InImagePath.EndsWith(".png")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);}else if (InImagePath.EndsWith(".jpg")||InImagePath.EndsWith(".jpeg")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);}else if (InImagePath.EndsWith(".bmp")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::BMP);}else if (InImagePath.EndsWith(".ico")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICO);}else if (InImagePath.EndsWith(".exr")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::EXR);}else if (InImagePath.EndsWith(".icns")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICNS);}else if (InImagePath.EndsWith(".tiff")){return ImageWrapperModule.CreateImageWrapper(EImageFormat::TIFF);}return nullptr;
}
后续开始写第蓝图调用读取图片的函数。
相关文章:
UE5 C++ 读取图片插件(一)
原来UE可以使用 static,之前不知道,一用就报错。 static TSharedPtr<IImageWrapper> GetImageWrapperByExtention(const FString InImagePath); //智能指针,方便追寻引用C,加载ImageWrapperstatic UTexture2D* LoadTexture2D(const FString& …...
C语言行地址列地址区别,内存的分配
开辟了10个字节的空间在栈中 "abc"常量在代码段 char a[10]"abc"; p:8个字节存"abc"的地址 "abc"常量在代码段中 char *p"abc" char *q"abc" p,q的值是一样的 到…...
Unity 一键修改图片缩放保存为当前的一半大小
用来压缩贴图大小还是比较方便的 支持 png,jpg,tga 话不多说 直接上代码 [MenuItem("Assets/扩展功能/缩放贴图一半尺寸(png | jpg | tga)", false)]static void ScaleHalfTextureSizeMenu(){foreach(var obj in Selection.objects) {Texture…...
Identifying User Goals from UI Trajectories论文学习
通过UI轨迹识别用户的需求。 这篇论文同样聚焦于UI agent,只是思路比较特别。他们想要通过训练agent通过用户的行为轨迹反推出他们想要干什么的能力来锻炼agent识别,理解,使用UI的能力。同时这个训练项目本身也有一定的实际意义,…...
[STM32]从零开始的STM32标准库环境搭建(小白向)
一、我们为什么要搭建STM32标准库开发环境 如果你对STM32有一定的了解,相信你已经认识了STM32的几种开发方式。基于STM32寄存器开发,基于ST官方的标准库开发,基于ST官方的HAL库开发。我们现在来了解一下这些库的优缺点。首先就是基于寄存器开…...
解决 Android 上的 .NET MAUI/Xamarin.AndroidX 应用调用 ASP.NET Core API 端点时 SSL 连接被拒绝的问题
从虚拟机调用本地API报各种 SSL 连接不上的错误,这给本地调试造成了极大的不便,在被这个问题困扰了多日以后,终于在GitHub上找到答案 基于这个 帖子 ,有一个回复 他写了一个帮助类,专门用来调试本地的API,…...
助贷CRM系统:为金融中介行业打造全新营销管理模式
助贷CRM(客户关系管理)系统是针对金融中介行业,特别是从事贷款助贷业务的机构设计的一套综合管理系统。该系统旨在通过数字化、智能化的手段,优化金融中介机构的营销、销售、客户管理及服务流程,提升运营效率ÿ…...
HBase 部署及shell操作
HBase 数据库 一、HBase 概述1.1 HBase 是什么HBase 的特点 二、HBase 模型及架构2.1 HBase 逻辑模型2.2 HBase 数据模型2.3 HBase 物理模型2.3.1 列簇物理模型2.3.2 Rowkey 字段排序2.3.3 Region 存储到不同节点2.3.4 Region 结构 2.4 HBase 基本架构 三、搭建 HBase 分布式集…...
使用Fign进行客户端远程调用和SpringFormEncoder的使用
1、引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 2、启动类加上注解 EnableFeignClients SpringBootApplication public class FeignTe…...
golang 数据库使用注意事项
1.在使用 fmt.Sprintf 构建 SQL 插入语句时,参数包含特殊符号(如引号 、分号 ;、反斜杠 \ 等),可能会导致 SQL 注入或插入失败的问题。为了解决这个问题,推荐使用占位符(如 $1, $2, 等)和参数化…...
Leetcode面试经典150题-221.最大正方形
解法都在代码里,不懂就留言或者私信 class Solution {/**本题一看就是典型的动态规划,要找以每个点为右下角的正方形的面积,然后取最大的这个题要注意找规律,我找到的规律如下:1.以第一行为右下角的,因为正…...
51单片机-DS1302,操作简述
DS1302的命令字(Command Byte)是由控制DS1302芯片的主机(通常是单片机,如51单片机)来生成和发送的。DS1302是一款实时时钟(RTC)芯片,它通过串行通讯接口与单片机进行数据交换。 DS1…...
Vue3+Vite+Echarts 出现Missing semicolon错误
使用的echarts代码如下: import * as echarts from echarts;type EChartsOption echarts.EChartsOption;var chartDom document.getElementById(main)!; var myChart echarts.init(chartDom); var option: EChartsOption;option {series: [{type: gauge,center: [50%, 6…...
iOS——frame和bounds的区别
把frame理解为占用区域,把bounds理解为边界。View在旋转过程中,其实自己的坐标系统并没有发生改变,bounds中的origin只能通过setBounds方法修改。 frame 定义了视图在其父视图坐标系统中的位置和大小。其坐标系是相对于俯视图的坐标系。 bou…...
Trm理论 3(注意力机制)
注意力机制(attention) 在使用LSTM,CNN等模型的时候,很难决定对于一个信息什么是重要的,什么是不重要的。因此注意力机制就是为了优化这一问题 怎么做注意力机制 注意力机制包含,查询对象(Q&…...
Vue2和Vue3项目创建的区别和 element ui 和element plus的导入方式
文章目录 创建项目Vue2Vue3 Vue2项目机构Vue 2 Element UI VUE3项目结构Vue 3 Element Plus 创建项目 Vue2 Vue CLI 3 及之前版本: 使用 vue-cli 创建项目: npm install -g vue/cli vue create my-project-vue2 cd my-project-vue2Vue3 Vue CLI 4…...
基于STM32的猫狗宠物喂养系统设计(微信小程序)(215)
文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】选题背景【6】国内外技术发展现状【7】研究的目…...
spark读取csv文件
测试spark读取本地和hdfs文件 from pyspark.sql import SparkSessionspark SparkSession.builder \.appName("Example PySpark Script") \.getOrCreate()# 读取本地csv文件 df spark.read.csv("/Users/xiaokkk/Desktop/local_projects/spark/intents.csv&quo…...
钢铁百科:Q420DR力学性能、Q420DR执行标准、Q420DR低温容器钢板
Q420DR钢板是一种专为低温压力容器设计的优质钢材,其材质特性、执行标准、化学成分、力学性能、交货状态、应用范围以及常用规格等方面都具有显著的特点。 一、Q420DR钢板材质 Q420DR钢板的命名方式体现了其材质特性。其中,“Q”代表屈服强度ÿ…...
三菱机器人手柄维修示教器维修手操器面板等
机器人手柄维修(示教器维修)故障现象包括:黑屏、指示灯无任何显示, 上电蓝屏、白屏,通电几分钟后屏幕变为蓝屏,主板故障,通讯时有时无, 触摸失灵,有时白屏,触…...
「EEG脑电信号处理——(20)癫痫发作类型分类:ILAE 2017 标准详解」2026年04月08日
目录 摘要 1. 癫痫发作的基本概念 2. ILAE 2017 发作分类框架 典型病例举例 病例1(局灶性发作) 病例2(全面性发作) 3. 进一步分类的两大关键观察指标 4. 局灶性发作(Focal Onset Seizures) 4.1 按…...
高效实战:AdvancedSessionsPlugin多玩家管理解决方案全解析
高效实战:AdvancedSessionsPlugin多玩家管理解决方案全解析 【免费下载链接】AdvancedSessionsPlugin Advanced Sessions Plugin for UE4 项目地址: https://gitcode.com/gh_mirrors/ad/AdvancedSessionsPlugin 在虚幻引擎开发中,如何快速构建稳定…...
使用小龙虾来操作猿编程的遥控车怕
一、什么是 Q 饱和运算? 1. 核心痛点:普通运算的 “数值回绕” 普通算术运算(如 ADD/SUB)溢出时,数值会按补码规则 “回绕”,导致结果完全错误: 示例:int8_t 类型最大值 127 1 → 结…...
设计方案:核心框架搭建与落地实操全指南
当前很多团队在输出设计方案时容易陷入两个极端:要么过度追求创意忽略落地可行性,导致方案最终停留在概念阶段无法产生实际价值;要么完全照搬模板缺乏针对性,无法匹配业务的个性化需求。尤其是电商、新媒体、企业服务等领域的设计…...
别再吹牛了,% Vibe Coding 存在无法自洽的逻辑漏洞!蕾
简介 langchain中提供的chain链组件,能够帮助我门快速的实现各个组件的流水线式的调用,和模型的问答 Chain链的组成 根据查阅的资料,langchain的chain链结构如下: $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...
AudioSwitch:Windows音频设备一键切换与音量管理的终极解决方案
AudioSwitch:Windows音频设备一键切换与音量管理的终极解决方案 【免费下载链接】AudioSwitch Switch between default audio input or output change volume 项目地址: https://gitcode.com/gh_mirrors/au/AudioSwitch 在Windows系统中频繁切换音频设备是否…...
如何轻松打造完美舰船配置:EVE Online终极离线助手Pyfa使用指南
如何轻松打造完美舰船配置:EVE Online终极离线助手Pyfa使用指南 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 你是否在EVE Online中为舰船配置而烦恼&am…...
小白友好!Qwen2.5-7B-Instruct本地部署,实时参数调节实战
小白友好!Qwen2.5-7B-Instruct本地部署,实时参数调节实战 1. 为什么选择Qwen2.5-7B-Instruct Qwen2.5-7B-Instruct是阿里通义千问团队推出的旗舰级大语言模型,相比轻量级的1.5B/3B版本,7B参数规模带来了质的飞跃。这个模型在18T…...
KKS-HF Patch 完整解决方案:优化《Koikatsu Sunshine》游戏体验指南
KKS-HF Patch 完整解决方案:优化《Koikatsu Sunshine》游戏体验指南 【免费下载链接】KKS-HF_Patch Automatically translate, uncensor and update Koikatsu Sunshine! 项目地址: https://gitcode.com/gh_mirrors/kk/KKS-HF_Patch KKS-HF Patch 是针对《Koi…...
3分钟搞定:IDM无限试用重置工具完整使用指南
3分钟搞定:IDM无限试用重置工具完整使用指南 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否曾因Internet Download Manager(IDM)试用期结束…...
