目录

结果图

节点样式 

主要代码

调试代码

结果图

节点样式 

主要代码

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

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

};

// 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 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(FName("IMageWrapper"));

TSharedPtr imageWrapper = imageWrapperModule.CreateImageWrapper(imageformat);

//解码图片

//获取图片信息

if (!imageWrapper->SetCompressed(CompressedData.GetData(), CompressedData.Num())) {

Lib::echo("Compressed file failed", 3);

return nullptr;

}

//创建纹理

TArray 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;

}

调试代码

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

};

 

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

}

 

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: