UE5_加载本地图片(jpg, png) 转 UTexture

UE5_加载图片到UTexture

__Desc

__Time__: 2024-06-05 16:30
__Author__: Yblackd
__Desc__: UE5.2 加载本地图片 转 UTexture2D, 给材质 和 UMG 使用

使用方式

  1. 新建继承BlueprintFunctionLibrary c++ 类
  2. 复制下面源码,修改类名
  3. 实测加载 jpg,jpeg, png 都可以; 其他未测试

源码

// .h
UFUNCTION(BlueprintCallable, Category = "UtilityBPLibrary | Texture")
static bool LoadImageToTexture(const FString& ImgPath, UTexture2D*& Texture2D);

// .cpp

bool UUtilityBPLibrary::LoadImageToTexture(const FString& ImgPath, UTexture2D*& Texture2D)
{
	if (!FPaths::FileExists(ImgPath))
	{
		YDLogWarnFormat("%s Img Not Exist", *ImgPath);
		return false;
	}

	TArray<uint8> FileData;
	if (!FFileHelper::LoadFileToArray(FileData, *ImgPath))
	{
		YDLogWarnFormat("%s Img Loading Failed ", *ImgPath);
		return false;
	}

	// 使用图像包装器模块 创建 图像包装器
	IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
	EImageFormat ImageFormat = ImageWrapperModule.GetImageFormatFromExtension(*ImgPath);
	TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(ImageFormat);
	if (!ImageWrapper.IsValid())
	{
		YDLogWarnFormat("%s Img Loading Failed ", *ImgPath);
		return false;
	}

	// 解码 JPEG文件 到 FImage对象
	if (!ImageWrapper->SetCompressed(FileData.GetData(), FileData.Num()))
	{
		YDLogWarnFormat("%s Img 解码失败 ", *ImgPath);
		return false;
	}


	TArray<uint8> RawData;
	if (!ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, RawData))
	{
		YDLogWarnFormat("%s Img 获取原始数据失败 ", *ImgPath);
		return false;
	}

	int ImgWidgth = ImageWrapper->GetWidth();
	int ImgHeight = ImageWrapper->GetHeight();

	// 创建纹理
	Texture2D = UTexture2D::CreateTransient(ImgWidgth, ImgHeight, PF_B8G8R8A8);

	// 填充纹理数据
	FTexture2DMipMap& Mip = Texture2D->GetPlatformData()->Mips[0];
	void* Data = Mip.BulkData.Lock(LOCK_READ_WRITE);
	FMemory::Memcpy(Data, RawData.GetData(), RawData.Num());
	Mip.BulkData.Unlock();

	// 设置纹理参数
	Texture2D->UpdateResource();

	return true;
}

相关推荐

  1. UE5_本地图片(jpg, png) UTexture

    2024-06-09 18:50:04       29 阅读
  2. MFC 本地文件设置图标

    2024-06-09 18:50:04       54 阅读
  3. UE5 动态资源和类

    2024-06-09 18:50:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 18:50:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 18:50:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 18:50:04       87 阅读
  4. Python语言-面向对象

    2024-06-09 18:50:04       96 阅读

热门阅读

  1. 详解Selenium 强制等待、隐式等待和显式等待

    2024-06-09 18:50:04       28 阅读
  2. selenium和urllib3版本冲突解决

    2024-06-09 18:50:04       32 阅读
  3. Golang:bytes 格式和解析数字字节值(10K、2M、3G等)

    2024-06-09 18:50:04       26 阅读
  4. WPF 简单页面切换示例

    2024-06-09 18:50:04       25 阅读
  5. wpf、winform 监听USB拔插时触发

    2024-06-09 18:50:04       31 阅读
  6. Vue中的key到底有什

    2024-06-09 18:50:04       25 阅读
  7. 第十二章:净世山的终极考验

    2024-06-09 18:50:04       32 阅读
  8. 3_1 Linux网络基础

    2024-06-09 18:50:04       34 阅读
  9. 网络流媒体协议——RTMP

    2024-06-09 18:50:04       29 阅读
  10. HOW - 面试技巧系列 - 全英文面试

    2024-06-09 18:50:04       28 阅读
  11. 泛化能力的理解

    2024-06-09 18:50:04       30 阅读
  12. 中介子方程八

    2024-06-09 18:50:04       30 阅读
  13. Visual Studio的使用

    2024-06-09 18:50:04       31 阅读
  14. 掌握Excel字符串拼接

    2024-06-09 18:50:04       31 阅读
  15. 在物联网的应用——智能交通

    2024-06-09 18:50:04       28 阅读