读取本地图片
代码实现
build.cs
添加 ImageWrapper
模块,使用时注意添加相关头文件
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ImageWrapper" });
-
支持图片类型
png
jpg
bmp
ico
exr
icns
-
注意
jpg
读取后 R 和 B 的通道位置ERGBFormat::RGBA
、PF_R8G8B8A8
→ERGBFormat::BGR
、PF_B8G8R8A8
在虚幻引擎中,要将本地图片转换为 UTexture2D
类型,你可以使用以下步骤:
-
加载图片文件: 使用
FImageUtils::ImportFileAsTexture2D
函数或自定义加载函数将图片文件加载为UTexture2D
对象。 -
示例代码:
cppCopy Code#include "ImageUtils.h" #include "Engine/Texture2D.h" UTexture2D* LoadImageAsTexture2D(const FString& FilePath) { TArray<uint8> ImageData; if (FFileHelper::LoadFileToArray(ImageData, *FilePath)) { IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(TEXT("ImageWrapper")); TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG); // Assuming PNG format if (ImageWrapper->SetCompressed(ImageData.GetData(), ImageData.Num())) { TArray<uint8> UncompressedRGBA; if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA)) { UTexture2D* Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight()); if (Texture) { void* TextureData = Texture->PlatformData->Mips[0].BulkData.GetAllocation(); FMemory::Memcpy(TextureData, UncompressedRGBA.GetData(), UncompressedRGBA.Num()); Texture->UpdateResource(); return Texture; } } } } return nullptr; }
-
使用场景: 你可以将此函数用于动态加载和显示本地图片作为纹理,例如在用户界面或游戏中使用。
确保正确处理图片格式和文件路径,并根据需要调整代码以适应不同的图像格式。
代码解析
这段示例代码的作用是将本地图片文件加载并转换为虚幻引擎中的 UTexture2D
对象。以下是代码的逐步解释:
- 加载图片文件:
FFileHelper::LoadFileToArray
用于读取指定路径的图片文件,并将其数据存储到ImageData
数组中。
- 创建图片包装器:
IImageWrapperModule
模块用来处理不同格式的图片,ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG)
创建一个用于处理 PNG 格式图片的包装器。
- 设置压缩数据:
ImageWrapper->SetCompressed
将图片数据传递给包装器。
- 解压缩数据:
ImageWrapper->GetRaw
从包装器中提取解压缩的RGBA
数据。
- 创建
UTexture2D
对象:UTexture2D::CreateTransient
创建一个临时的UTexture2D
对象,大小与图片相匹配。Texture->PlatformData->Mips[0].BulkData.GetAllocation()
获取纹理的数据区域,并将解压缩的图片数据复制到这个区域。
- 更新资源:
Texture->UpdateResource()
更新纹理资源,使其可用于渲染。
- 返回纹理对象:
- 最后返回创建的
UTexture2D
对象。
- 最后返回创建的
这样,你可以动态加载本地图片,并在虚幻引擎中将其作为纹理使用。
拓展
图片包装器(Image Wrapper
)是一个处理图片格式的工具,它负责将图片数据从各种格式(如 PNG
、JPEG
)解码成原始像素数据。虚幻引擎中的 IImageWrapper
接口和相关模块(如 IImageWrapperModule
)提供了对图片格式的支持,允许你读取、解码和处理不同类型的图像文件。通过这些包装器,你可以将图片文件转换为可以在引擎中使用的纹理格式。