UE4_C++_读取本地图片至UE4中使用

原创 2018年04月16日 10:39:52

引擎版本:4.17
支持图片类型:png,jpg,bmp,ico,exr,icns
输出图片:UTexture2D
.h
#include “Engine/Texture2D.h”

UFUNCTION(BlueprintCallable, Category = “Image”)
static UTexture2D* LoadTexture2D(const FString path, bool& IsValid, int32& OutWidth, int32& OutHeight);
.cpp
#include ” ImageTest.h”
#include “FileManagerGeneric.h”
#include “Runtime/ImageWrapper/Public/Interfaces/IImageWrapper.h”
#include “Runtime/ImageWrapper/Public/Interfaces/IImageWrapperModule.h”

//图片类型
static IImageWrapperPtr GetImageWrapperByExtention(const FString InImagePath)
{
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked(FName(“ImageWrapper”));
if (InImagePath.EndsWith(“.png”))
{
return ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);
}
else if (InImagePath.EndsWith(“.jpg”)||InImagePath.EndsWith(“.jpeg”))
{
return ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);
}
else if (InImagePath.EndsWith(“.bmp”))
{
return ImageWrapperModule.CreateImageWrapper(EImageFormat::BMP);
}
else if (InImagePath.EndsWith(“.ico”))
{
return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICO);

}
else if (InImagePath.EndsWith("exr"))
{
    return ImageWrapperModule.CreateImageWrapper(EImageFormat::EXR);
}
else if (InImagePath.EndsWith(".icns"))
{
    return ImageWrapperModule.CreateImageWrapper(EImageFormat::ICNS);
}
return nullptr;

}

//根据路径加载贴图
UTexture2D* ImageTest::LoadTexture2D(const FString path,bool& IsValid,int32& OutWidth,int32& OutHeight)
{
UTexture2D* Texture = nullptr;
IsValid = false;
if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*path))
{
return nullptr;
}
TArray RawFileData;
if (!FFileHelper::LoadFileToArray(RawFileData,*path))
{
return nullptr;
}
IImageWrapperPtr ImageWrapper = GetImageWrapperByExtention(path);
if (ImageWrapper.IsValid()&&ImageWrapper->SetCompressed(RawFileData.GetData(),RawFileData.Num()))
{
const TArray* UncompressedRGBA = nullptr;
if (ImageWrapper->GetRaw(ERGBFormat::RGBA,8,UncompressedRGBA))
{
Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8);
if (Texture != nullptr)
{
IsValid = true;
OutWidth = ImageWrapper->GetWidth();
OutHeight = ImageWrapper->GetHeight();
void* TextureData = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(TextureData, UncompressedRGBA->GetData(), UncompressedRGBA->Num());
Texture->PlatformData->Mips[0].BulkData.Unlock();
Texture->UpdateResource();
}
}
}
return Texture;

}

.build.cs中添加ImageWrapper模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/justtestlike/article/details/79957505

用UE4蓝图制作FPS-初中生学UE4第二季

-
  • 1970年01月01日 08:00

UE4 读取本地图片

参考链接:https://answers.unrealengine.com/questions/235086/texture-2d-shows-wrong-colors-from-jpeg-on-ht...
  • qq992817263
  • qq992817263
  • 2016-09-29 19:34:59
  • 4384

Unreal Engine 4 Scripting with C++ Cookbook - 2016.pdf (带彩色插图)

  • 2017年10月17日 12:03
  • 6.98MB
  • 下载

UE4 Materials for Mobile Platforms

Materials for Mobile Platforms Mobile Game Development On this page: Overview...
  • pizi0475
  • pizi0475
  • 2015-08-18 10:46:28
  • 708

材质 “Glow 效果” 的实现【UE4】

效果如下:(由于对上传图片大小有限制,所以GIF截图质量下降严重)算法较简单,首先来看 Emissive color 部分:就是将对实现准备好的三张纹理进行线性插值,其中 Mask 为遮罩纹理接着再来...
  • panda1234lee
  • panda1234lee
  • 2017-03-09 15:29:41
  • 4152

Shader特效——“Gamma校正”的实现 【GLSL】

效果图: GLSL代码: uniform sampler2D srcTex; uniform vec3 levels; vec3 gammaCorrect(vec3 color,...
  • panda1234lee
  • panda1234lee
  • 2016-08-21 21:10:15
  • 1242

虚幻4 shader编译4

首先,我找到了运送给Workder来编译的中间文件,叫WorkerInputOnly.in 但是有四个文件夹,目前不知道为什么有四个。 查看这个文件,里面有一个结构体Frame是今天同事刚给我讲完,是...
  • lqpgfz
  • lqpgfz
  • 2016-04-29 23:23:03
  • 958

(173)纹理表达式

FontSample(字体取样) FontSample(字体取样)表达式允许您以常规 2D 纹理形式,从字体资源中取得纹理页面样本。字体的阿尔法通道将包含字体轮廓值。您只能指定有效的字体页面。 ...
  • zl908760230
  • zl908760230
  • 2017-05-29 18:00:02
  • 190

材质 “Glow 效果” 的实现【UE4】

效果如下:(由于对上传图片大小有限制,所以GIF截图质量下降严重)算法较简单,首先来看 Emissive color 部分:就是将对实现准备好的三张纹理进行线性插值,其中 Mask 为遮罩纹理接着再来...
  • panda1234lee
  • panda1234lee
  • 2017-03-09 15:29:41
  • 4152

Shader特效——实现“羽化”【GLSL】

效果图: 片元着色器代码: uniform sampler2D Tex; const float size = 0.5; void main(void) { vec2 realSi...
  • panda1234lee
  • panda1234lee
  • 2016-08-13 14:45:34
  • 3132
收藏助手
不良信息举报
您举报文章:UE4_C++_读取本地图片至UE4中使用
举报原因:
原因补充:

(最多只允许输入30个字)