首页 > 其他分享 >UE4 读取本地图片

UE4 读取本地图片

时间:2022-12-13 14:37:09浏览次数:68  
标签:const 读取 ++ DestPtr SrcPtr auxOrigin 本地 UE4 TArray


参考链接:​​https://answers.unrealengine.com/questions/235086/texture-2d-shows-wrong-colors-from-jpeg-on-html5-p.html​


我这里,不能将图片全放工程之中,需要在外部在加载图片资源,再来使用


1.通过本地图片路径,获取图片,并将其数据转为uint类型的数组

#pragma region 通过本地图片转换成UTexture2D
UTexture2D* AMyProjectGameMode::GetLocalTexture(const FString &_TexPath)
{
UTexture2D* OutTex=NULL;
IImageWrapperModule& imageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
IImageWrapperPtr imageWrapper = imageWrapperModule.CreateImageWrapper(EImageFormat::PNG);

TArray<uint8> OutArray;
if(FFileHelper::LoadFileToArray(OutArray, *_TexPath))
{
if (imageWrapper.IsValid()&&
imageWrapper->SetCompressed(OutArray.GetData(), OutArray.Num()))
{
const TArray<uint8>* uncompressedRGBA = NULL;
if (imageWrapper->GetRaw(ERGBFormat::RGBA, 8, uncompressedRGBA))
{
const TArray<FColor> uncompressedFColor=uint8ToFColor(*uncompressedRGBA);
OutTex=TextureFromImage(
imageWrapper->GetWidth(),
imageWrapper->GetHeight(),
uncompressedFColor,
true);
}
}
}
return OutTex;
}
#pragma endregion

2.将uint8数组转为颜色数组

#pragma region 将uint8数组转为颜色数组
TArray<FColor> AMyProjectGameMode::uint8ToFColor(const TArray<uint8> origin)
{
TArray<FColor> uncompressedFColor;
uint8 auxOrigin;
FColor auxDst;

for (int i = 0; i < origin.Num(); i++) {
auxOrigin = origin[i];
auxDst.R = auxOrigin;
i++;
auxOrigin = origin[i];
auxDst.G = auxOrigin;
i++;
auxOrigin = origin[i];
auxDst.B = auxOrigin;
i++;
auxOrigin = origin[i];
auxDst.A = auxOrigin;
uncompressedFColor.Add(auxDst);
}

return uncompressedFColor;

}
#pragma endregion

3.将颜色数组赋值给Texture


#pragma region 将颜色数组赋值给Texture
UTexture2D* AMyProjectGameMode::TextureFromImage(const int32 SrcWidth, const int32 SrcHeight, const TArray<FColor> &SrcData, const bool UseAlpha)
{

// 创建Texture2D纹理
UTexture2D* MyScreenshot = UTexture2D::CreateTransient(SrcWidth, SrcHeight, PF_B8G8R8A8);

// 锁住他的数据,以便修改
uint8* MipData = static_cast<uint8*>(MyScreenshot->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE));

// 创建纹理数据
uint8* DestPtr = NULL;
const FColor* SrcPtr = NULL;
for (int32 y = 0; y<SrcHeight; y++)
{
DestPtr = &MipData[(SrcHeight - 1 - y) * SrcWidth * sizeof(FColor)];
SrcPtr = const_cast<FColor*>(&SrcData[(SrcHeight - 1 - y) * SrcWidth]);
for (int32 x = 0; x<SrcWidth; x++)
{
*DestPtr++ = SrcPtr->B;
*DestPtr++ = SrcPtr->G;
*DestPtr++ = SrcPtr->R;
if (UseAlpha)
{
*DestPtr++ = SrcPtr->A;
}
else
{
*DestPtr++ = 0xFF;
}
SrcPtr++;
}
}

// 解锁纹理
MyScreenshot->PlatformData->Mips[0].BulkData.Unlock();
MyScreenshot->UpdateResource();

return MyScreenshot;
}
#pragma endregion

4.我这里建图片路径放在工程的相对路径下,调用GetLocalTexture函数,获取Texture2D

void AMyProjectGameMode::BeginPlay()
{
const FString _FilePath = FPaths::GameDir() + "video_logo.png";
_UITex = GetLocalTexture(_FilePath);
}

5.注意别忘了,需要添加两个头文件

#include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapper.h"
#include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapperModule.h"

6.运行截图,我这里将获取的图片放在了UI界面上

UE4 读取本地图片_sed

7.我在读取jpg格式的图片的时候,颜色明显不对,读png的格式的时候,就完全正常,还未去寻找原因

标签:const,读取,++,DestPtr,SrcPtr,auxOrigin,本地,UE4,TArray
From: https://blog.51cto.com/u_15911199/5934038

相关文章

  • ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据
    简介作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码。最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代......
  • UE4实现闪烁效果
    官网文档链接:​​http://docs.unrealengine.com/latest/CHN/Engine/Rendering/Materials/ExpressionReference/Math/index.html?utm_source=editor&utm_medium=docs&utm_ca......
  • UE4利用Save Game创建全局变量
    因为盲目的做了一个UE4的项目,没有用到UE4的无缝加载,我只能在一个个关卡中手动切换,然后每次的数据都会重置,这对于项目来说,造成了体验感的极度下降。然而我查了一下怎样在UE4......
  • UE4帧动画Matineed
    发一句牢骚,ue4除了渲染好一点,其他操作都没有unity便利,最近需要在项目中,调几个简单的动画使用到了Matineed,相当不好用。也可能是unity转ue4,有先入为主的观念,哈哈,nevermind.1......
  • windows搭建maven私服nexus仓库并且上传本地maven库jar包
    windows搭建maven私服nexus仓库并且上传本地maven库jar包一、maven私服仓库nexus搭建nexus下载1.首先需要从官网下载nexus安装包地址:https://www.sonatype.com/downloa......
  • 在asp.net中读取XML文件信息的4种方法
    在asp.net中读取XML文件信息的4种方法方法一:使用XML控件<%@PageLanguage="C#"%><html><body><h3><fontface="Verdana">读取XML方法一</font></h3>......
  • 本地编译腾讯 mars 记录
    官方文档如需要自定义日志加密算法或者长短连协议加解包,请选择staticlibs选项,即2和3。选项1和2输出结果全部在mars_android_sdk目录中,3和4输出结果全部在ma......
  • Maven 不引用本地jar包文件
    Maven不引用本地jar包文件错误提示,Couldnotresolvedependenciesforxxx将仓库下面的_remote.repositories和.lastUpdated这两个文件删除,然后重新reload。后......
  • 【Nginx】Nginx 配置 访问本地目录
    【Nginx】Nginx配置访问本地目录 server{listen80;server_nameme.runhemei.com;rootD:\目录;gzipon;gzi......
  • 【Linux】Linux 同步远程文件 或 本地文件 rsync命令
    目录​​介绍​​​​特征​​​​用法​​​​远程拷贝同步文件、目录​​​​本地到远程​​​​远程到本地​​​​本地拷贝同步文件、目录​​​​同步一个文件从本地一......