Ue5 导入图片

本文介绍了一种使用C++在Unreal Engine中将不同格式的图片文件加载到纹理对象的方法。该方法首先将文件读取为二进制数组,然后根据文件扩展名确定图片格式,接着利用Unreal Engine提供的图像转换模块处理图片数据并创建纹理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

```

蓝图部分:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值