【UE】UEC++ 加载本地图片(LoadImageFromFile)和本地文件夹内所有图片(LoadAllImagesFromFiles)

目录

UEC++ 加载本地图片(LoadImageFromFile)和本地文件夹内所有图片(LoadAllImagesFromFiles)

LoadImageFromFile

GetFolderFiles

LoadAllImagesFromFiles

GetImageWrapperByExtention


LoadPicture.h

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "LoadPicture.generated.h"

UCLASS()
class LOADPICTURE_API ULoadPicture : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable, Category = "LoadPicture")
	static UTexture2D* LoadImageFromFile(const FString& ImagePath);

	UFUNCTION(BlueprintCallable, Category = "LoadPicture")
	static TArray<FString> GetFolderFiles(FString& Path);

	UFUNCTION(BlueprintCallable, Category = "LoadPicture")
	static TArray<UTexture2D*> LoadAllImagesFromFiles(FString& Paths);
	
	static TSharedPtr<class IImageWrapper> GetImageWrapperByExtention(const FString Path);
};

LoadPicture.cpp

#include "LoadPicture.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"

UTexture2D* ULoadPicture::LoadImageFromFile(const FString& ImagePath)
{
	if (ImagePath.IsEmpty()) {
		return nullptr;
	}
	
	TArray<uint8> CompressedData;
	if (!FFileHelper::LoadFileToArray(CompressedData, *ImagePath)) {
		return nullptr;
	}
	
	TSharedPtr<IImageWrapper> ImageWrapper = GetImageWrapperByExtention(ImagePath);
	if (!ImageWrapper->SetCompressed(CompressedData.GetData(), CompressedData.Num())) {
		return nullptr;
	}
	
	TArray<uint8> UncompressedRGBA;
	if (!ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA))
		return nullptr;
 
	UTexture2D* Texture2D= UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8);
	if (!Texture2D)
		return nullptr;
	
	void* TextureData = Texture2D->GetPlatformData()->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
	FMemory::Memcpy(TextureData, UncompressedRGBA.GetData(), UncompressedRGBA.Num());
	Texture2D->GetPlatformData()->Mips[0].BulkData.Unlock();
	Texture2D->UpdateResource();
	
	return Texture2D;
}

TArray<FString> ULoadPicture::GetFolderFiles(FString& Path)
{
	TArray<FString> Files;
	FPaths::NormalizeDirectoryName(Path);
	IFileManager& FileManager = IFileManager::Get();
	const FString FinalPath = Path / TEXT("*");
	FileManager.FindFiles(Files, *FinalPath, true, true);
	return Files;
}

TArray<UTexture2D*> ULoadPicture::LoadAllImagesFromFiles(FString& Paths)
{
	TArray<FString> ImgPaths = GetFolderFiles(Paths);
	TArray<UTexture2D*> Texture2DArr;
	for (auto ItemPath : ImgPaths)
	{
		UTexture2D* Texture2D = LoadImageFromFile(Paths + "/" + ItemPath);
		Texture2DArr.Add(Texture2D);
	}
	return Texture2DArr;
}

TSharedPtr<IImageWrapper> ULoadPicture::GetImageWrapperByExtention(const FString Path)
{
	IImageWrapperModule& Module = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
	if (Path.EndsWith(".png"))
	{
		return Module.CreateImageWrapper(EImageFormat::PNG);
	}
	if (Path.EndsWith(".jpg"))
	{
		return Module.CreateImageWrapper(EImageFormat::JPEG);
	}
	return nullptr;
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
Puerts是一款针对Unreal Engine 4的JavaScript运行时,它允许开发者使用JavaScript来编写UE4的游戏逻辑。下面是一些常见的Puerts语法和函数: ### 基本语法 #### 变量声明 ```javascript const a = 1; // 常量 let b = 2; // 变量 var c = 3; // 变量(不推荐使用) ``` #### 条件语句 ```javascript if (condition) { // 如果条件为真,执行这里的代码 } else if (condition2) { // 如果条件2为真,执行这里的代码 } else { // 如果条件都不为真,执行这里的代码 } ``` #### 循环语句 ```javascript for (let i = 0; i < 10; i++) { // 循环10次 } while (condition) { // 只要条件为真,就一直执行 } do { // 先执行一次,再判断条件是否为真,如果为真就继续执行 } while (condition); ``` #### 函数声明 ```javascript function add(a, b) { return a + b; } const add = function(a, b) { return a + b; }; const add = (a, b) => { return a + b; }; ``` ### Puerts函数 #### UObject Puerts中的UObject类对应UE4中的UObject,它是所有游戏对象的基类。 ```javascript const myObject = JSClass.Load("/Game/MyBlueprint.MyBlueprint_C"); // 加载蓝图类 const myObject2 = JSClass.Load("/Game/MyBlueprint.MyBlueprint_C").GeneratedClass; // 加载C++类 const myActor = myObject.GetDefaultObject(); // 获取默认对象 myActor.SetActorLocation(new FVector(0, 0, 0)); // 设置Actor的位置 ``` #### UFunction Puerts中的UFunction类对应UE4中的UFunction,它用于调用UE4中的函数。 ```javascript const myActor = GWorld.SpawnActor(MyActor.StaticClass(), new FVector(0, 0, 0), new FRotator(0, 0, 0)); // 在世界中生成Actor myActor.K2_AddActorWorldOffset(new FVector(100, 0, 0), false, null, false); // 调用Actor的函数 ``` #### UClass Puerts中的UClass类对应UE4中的UClass,它用于获取游戏类的元信息。 ```javascript const myClass = JSClass.Load("/Game/MyBlueprint.MyBlueprint_C"); // 加载蓝图类 const myClass2 = JSClass.Load("/Game/MyBlueprint.MyBlueprint_C").GeneratedClass; // 加载C++类 const myActorClass = myClass.Class; // 获取Actor类的元信息 ``` #### FObjectFinder Puerts中的FObjectFinder类用于查找UE4中的对象。 ```javascript const myTexture = new FObjectFinder(UTexture2D)("Texture2D'/Game/Textures/MyTexture.MyTexture'").Object; const myMaterial = new FObjectFinder(UMaterial)("Material'/Game/Materials/MyMaterial.MyMaterial'").Object; ``` #### FText Puerts中的FText类对应UE4中的FText,它用于处理游戏中的文本。 ```javascript const myText = new FText("Hello, world!"); // 创建一个新的FText对象 const myString = myText.ToString(); // 将FText转换为字符串 ``` 这里只列举了一些常见的Puerts语法和函数,更详细的内容可以参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hank_W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值