C++部分:
```cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "SimplePictureToolsLibrary.h"
#include "IImageWrapper.h"
#include "IImageWrapperModule.h"
bool USimplePictureToolsLibrary::LoadImageToTextrue2D(const FString& ImagePath, UTexture2D*& InTexture2D, float& Width,
float& Higth)
{
TArray<uint8> ImageResultData;
FFileHelper::LoadFileToArray(ImageResultData, *ImagePath); //载入文件为二进制数组
FString Ex = FPaths::GetExtension(ImagePath, false); //取文件的后缀名 , 不带点
//根据不同的后缀名 输出不同的 图片类型枚举 变量
EImageFormat ImageFormat = EImageFormat::Invalid;
if (Ex.Equals(TEXT("jpg"), ESearchCase::IgnoreCase) || Ex.Equals(TEXT("Jpeg"), ESearchCase::IgnoreCase))
//判断当前后缀名,和 是否要忽略大小写
{
ImageFormat = EImageFormat::JPEG;
}
else if (Ex.Equals(TEXT("PNG"), ESearchCase::IgnoreCase))
{
ImageFormat = EImageFormat::PNG;
}
else if (Ex.Equals(TEXT("BMP"), ESearchCase::IgnoreCase))
{
ImageFormat = EImageFormat::BMP;
}
//获取图片转换模块
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>("ImageWrapper");
//根据不同的图片类型 转换成 共享指针
TSharedPtr<IImageWrapper> ImageWrapperPtr = ImageWrapperModule.CreateImageWrapper(ImageFormat);
//通过解压后获得 BGRA 颜色数据,与图片格式无关了
if (ImageWrapperPtr.IsValid() && ImageWrapperPtr->SetCompressed(ImageResultData.GetData(),
ImageResultData.GetAllocatedSize())) //判断有效性 和 设置压缩
{
TArray<uint8> OutRawData; //跟格式无关的颜色数据
ImageWrapperPtr->GetRaw(ERGBFormat::BGRA, 8, OutRawData); //获取到数据
//获取宽高,并创建图片
Width = ImageWrapperPtr->GetWidth();
Higth = ImageWrapperPtr->GetHeight();
InTexture2D = UTexture2D::CreateTransient(Width, Higth, PF_B8G8R8A8, "MyLoadPic"); //创建图片的方法
if (InTexture2D)
{
//为了线程安全先开锁,写入颜色数据之后再进行 锁定
void* TextrueData = InTexture2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(TextrueData, OutRawData.GetData(), OutRawData.Num());
InTexture2D->PlatformData->Mips[0].BulkData.Unlock();
InTexture2D->UpdateResource(); //更新资源
return true;
}
}
return false;
}
```
蓝图部分: