新收到需求 需要程序化随机创建一张贴图 实现后写此博文记录
用到UTexture2D FImageUtils FFileHelper几个类
#include "Runtime/Core/Public/PixelFormat.h"
#include "Runtime/Core/Public/Math/RandomStream.h"
#include "time.h"
#include "Runtime/Engine/Public/ImageUtils.h"
#include "Runtime/Core/Public/Misc/FileHelper.h"#include "Runtime/Engine/Classes/Engine/Texture2D.h"
UTexture2D* UMyTextureSave::CreateImage() {
//创建一 张贴图
UTexture2D* tex= UTexture2D::CreateTransient(512, 512, PF_B8G8R8A8);
//随机数种子
srand((int)time(0));
//颜色数组 for循环根据高度和宽度写入颜色
TArray<FColor> cs;
for (size_t i = 0; i < 512; i++)
{
for (size_t j = 0; j < 512; j++)
{
FColor c(rand() % 255, rand() % 255, rand() % 255);
cs.Add(c);
}
}
TArray<uint8> compressed;
//压缩颜色数据为uint8数组数据
FImageUtils::CompressImageArray(512, 512, cs, compressed);
//设定存储路径
FString s = FPaths::ProjectSavedDir() + TEXT("/test.png");
TCHAR* t = s.GetCharArray().GetData();
//保存为图片文件
FFileHelper::SaveArrayToFile(compressed, t);
//获取并锁住贴图颜色缓冲区 模式为可写
FColor* colors= static_cast<FColor*>( tex->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE));
//拷贝颜色数据到贴图
FMemory::Memcpy(colors, cs.GetData(), sizeof(FColor)* cs.Num());
//解锁
tex->PlatformData->Mips[0].BulkData.Unlock();
//更新贴图
tex->UpdateResource();
return tex;
}