UE5 C++ 读取本地图片并赋值到UI上

目录

结果图

节点样式

主要代码

调试代码


结果图


节点样式

主要代码

(注释纯属个人理解,可能存在错误)

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"
#include "GameFramework/Actor.h"
#include "SDProject01/Lib/Lib.h"
#include "LoadLocalPic.generated.h"

UCLASS()
class SDPROJECT01_API ALoadLocalPic : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ALoadLocalPic();
	UFUNCTION(BlueprintCallable,Category="MyFunction2Load",meta=(Keywords="Load Image"))
	int testFunc(int a, int b);

	UFUNCTION(BlueprintCallable, Category = "MyFunction2Load", meta = (Keywords = "Load Image"))
	UTexture2D* LoadImageFromFile(const FString& ImagePath);
};
cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "LoadLocalPic.h"

// Sets default values
ALoadLocalPic::ALoadLocalPic()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}
int ALoadLocalPic::testFunc(int a, int b)
{
	return a + b;
}

UTexture2D* ALoadLocalPic::LoadImageFromFile(const FString& ImagePath)
{
	//判断地址为空
	if (ImagePath.IsEmpty()) {

		Lib::echo("Path is empty", 3);
		return nullptr;
	}

	//判断是否存在文件,文件是否能转为数组
	TArray<uint8> CompressedData;
	if (!FFileHelper::LoadFileToArray(CompressedData, *ImagePath)) {
		Lib::echo("file not find",3);
		return nullptr;
	}

	//判断文件格式
	EImageFormat imageformat = EImageFormat::Invalid;
	if (ImagePath.EndsWith(".png"))
		imageformat = EImageFormat::PNG;
	else if (ImagePath.EndsWith(".jpg") || ImagePath.EndsWith(".jpeg"))
		imageformat = EImageFormat::JPEG;
	else
	{
		Lib::echo("fileformat false", 3);
		return nullptr;
	}

	//创建图片封装器
	IImageWrapperModule& imageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("IMageWrapper"));
	TSharedPtr<IImageWrapper> imageWrapper = imageWrapperModule.CreateImageWrapper(imageformat);

	//解码图片
	//获取图片信息
	if (!imageWrapper->SetCompressed(CompressedData.GetData(), CompressedData.Num())) {

		Lib::echo("Compressed file failed", 3);
		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->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
	FMemory::Memcpy(texturedata, UncompressedRGBA.GetData(), UncompressedRGBA.Num());
	texture2d->PlatformData->Mips[0].BulkData.Unlock();

	texture2d->UpdateResource();
	return texture2d;
}

调试代码

cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"

/**
 * 
 */
class SDPROJECT01_API Lib
{
public:
	Lib();
	~Lib();
	static void echo(FString value, float duration);
	static void echo(float value, float duration);
};
cpp 复制代码
// Fill out your copyright notice in the Description page of Project Settings.


#include "SDProject01/Lib/Lib.h"

Lib::Lib()
{
}

Lib::~Lib()
{
}

void Lib::echo(FString value, float duration)
{

	GEngine->AddOnScreenDebugMessage(-1, duration, FColor::Blue, value);
}

void Lib::echo(float value, float duration)
{
	const FString temp = FString::Printf(TEXT("%f"), value);
	GEngine->AddOnScreenDebugMessage(-1,duration,FColor::Blue,temp);
}
相关推荐
咖啡咖_CoffCa20 小时前
【UE5】新建Editor Standalone Window插件,之前(或当前)创建插件的按钮消失(被顶掉/占用)的问题
ue5·虚幻引擎·插件开发
maki0772 天前
VR大空间资料 01 —— 常用VR框架对比
android·ue5·游戏引擎·vr·虚幻·pico
maki0773 天前
虚幻版Pico大空间VR入门教程 01 ——UE5 Android打包环境4.26~5.6
android·ue5·vr·虚幻·pico·大空间
DoomGT3 天前
UE5 - C++项目基础
c++·ue5·ue4·虚幻·虚幻引擎·unreal engine
HELLOMILI3 天前
[UnrealEngine] 虚幻引擎UE5地形入门指南 | UE5地形教程(UE5 Terrain)
游戏·ue5·游戏引擎·虚幻·虚幻引擎·unreal engine
努力的小钟4 天前
UE5 GAS GameAbility源码解析 ActivateAbility
ue5
HELLOMILI4 天前
[UnrealEngine] 虚幻编辑器界面 | 虚幻界面详解 | UE5界面详解
游戏·ue5·编辑器·游戏引擎·虚幻·unreal engine
AA陈超5 天前
虚幻引擎UE5专用服务器游戏开发-32 使用Gameplay Tags阻止连招触发
c++·游戏·ue5·游戏引擎·虚幻
努力的小钟5 天前
UE5 GAS GameAbility源码解析 CanActivateAbility
ue5
危险库5 天前
【UE4/UE5】在虚幻引擎中创建控制台指令的几种方法
c++·ue5·游戏引擎·ue4·虚幻