目录
结果图
节点样式
主要代码
调试代码
结果图
节点样式
主要代码
(注释纯属个人理解,可能存在错误)
// 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 propertiesALoadLocalPic();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<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;
}
调试代码
// 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);
}