虚幻4动态加载PNG给Texture2D
来源:互联网 发布:淘宝宝贝权重查询软件 编辑:程序博客网 时间:2024/06/05 05:22
本教程适用于4.17以前的版本,4.18以上不兼容
头文件:
#include "ImageWrapper.h"
/*载入PNG贴图*/
UFUNCTION(BlueprintCallable, Category = "GameSetting")
UTexture2D* GetPngFromPath(const FString& FullFilePath, bool& IsValid, int32& Width, int32& Height);
/*载入贴图*/
UTexture2D* GetTexture2DFromPath(const FString& FullFilePath, EImageFormat::Type ImageFormat, bool& IsValid, int32& Width, int32& Height);
源文件:
UTexture2D* AAKGameGameModeBase::GetPngFromPath(const FString& FullFilePath, bool& IsValid, int32& Width, int32& Height)
{
return GetTexture2DFromPath(FullFilePath, EImageFormat::Type::PNG,IsValid,Width,Height);
}
UTexture2D* AAKGameGameModeBase::GetTexture2DFromPath(const FString& FullFilePath, EImageFormat::Type ImageFormat, bool& IsValid, int32& Width, int32& Height)
{
IsValid = false;
UTexture2D* LoadedT2D = NULL;
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(ImageFormat);
// 从指定路径的文件加载
TArray<uint8> RawFileData;
if (!FFileHelper::LoadFileToArray(RawFileData, *FullFilePath)) return NULL;
// 新建Texture2D
bool valid = ImageWrapper.IsValid();
bool setCompressed = ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num());
if (valid && setCompressed)
{
const TArray<uint8>* UncompressedBGRA = NULL;
if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
{
LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);
// 检查是否存在
if (!LoadedT2D) return NULL;
// 设置出参
Width = ImageWrapper->GetWidth();
Height = ImageWrapper->GetHeight();
// 复制图像内容
void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());
LoadedT2D->PlatformData->Mips[0].BulkData.Unlock();
// 更新图像
LoadedT2D->UpdateResource();
// 成功
IsValid = true;
return LoadedT2D;
}
}
// 失败
IsValid = false;
return NULL;
}
这个官方的教程也可以尝试下,比较复杂
https://wiki.unrealengine.com/Asynchronous_Image_Loading_from_Disk
阅读全文
0 0
- 虚幻4动态加载PNG给Texture2D
- 虚幻4里的地图动态加载
- 虚幻4的关卡动态加载机制
- Xna4.0中使用Texture2D.FromStream加载png图像的问题
- 虚幻4动态加载画面(后台加载关卡)的实现
- Unity3d-加载Texture2D
- 虚幻4:加载资源LOG
- 虚幻4 UI加载优化
- VC动态加载png图片
- Unity 中 Png转Texture2D再转Sprite
- 给虚幻4添加内存跟踪功能
- 虚幻4加载OBJ模型的方法
- 虚幻4 动态更新 pak读取
- cocos2dx给DrawNode的shader传递Texture2D
- Unity中如何从jpg或png文件创建Texture2D
- XNA: 如何通过HTTP加载Texture2D 精灵
- lua-Texture2D纹理缓存的加载
- 虚幻4免费了,给开发者带来什么?
- 多线程安全修改static变量
- JavaBean笔记
- QT版用QLCDnumber显示时间
- mysql 通过存储过程批量更新数据(注意操作用户需要有mysql的创建临时表权限)
- c++如何用cout输出其他进制(十进制以外)以外数据
- 虚幻4动态加载PNG给Texture2D
- CSS3 calc() 属性——会计算的属性
- Week03_day05 集合(上)
- VMware® Workstation 12 Pro共享异常的解决办法
- 在JS中获取文件点之后的扩展名
- eclipse如何配置Tomcat
- linux中class_create和class_register说明
- 纪念第一次线上赛AK
- Java开发之注册登录系统