ue4加载本地图片_UE4 读取本地图片
我這里,不能將圖片全放工程之中,需要在外部在加載圖片資源,再來(lái)使用
1.通過本地圖片路徑,獲取圖片,并將其數(shù)據(jù)轉(zhuǎn)為uint類型的數(shù)組
#pragma region 通過本地圖片轉(zhuǎn)換成UTexture2D
UTexture2D* AMyProjectGameMode::GetLocalTexture(const FString &_TexPath)
{
UTexture2D* OutTex=NULL;
IImageWrapperModule& imageWrapperModule = FModuleManager::LoadModuleChecked(FName("ImageWrapper"));
IImageWrapperPtr imageWrapper = imageWrapperModule.CreateImageWrapper(EImageFormat::PNG);
TArray OutArray;
if(FFileHelper::LoadFileToArray(OutArray, *_TexPath))
{
if (imageWrapper.IsValid()&&
imageWrapper->SetCompressed(OutArray.GetData(), OutArray.Num()))
{
const TArray* uncompressedRGBA = NULL;
if (imageWrapper->GetRaw(ERGBFormat::RGBA, 8, uncompressedRGBA))
{
const TArray uncompressedFColor=uint8ToFColor(*uncompressedRGBA);
OutTex=TextureFromImage(
imageWrapper->GetWidth(),
imageWrapper->GetHeight(),
uncompressedFColor,
true);
}
}
}
return OutTex;
}
#pragma endregion2.將uint8數(shù)組轉(zhuǎn)為顏色數(shù)組
#pragma region 將uint8數(shù)組轉(zhuǎn)為顏色數(shù)組
TArray AMyProjectGameMode::uint8ToFColor(const TArray origin)
{
TArray 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 endregion3.將顏色數(shù)組賦值給Texture
#pragma region 將顏色數(shù)組賦值給Texture
UTexture2D* AMyProjectGameMode::TextureFromImage(const int32 SrcWidth, const int32 SrcHeight, const TArray &SrcData, const bool UseAlpha)
{
// 創(chuàng)建Texture2D紋理
UTexture2D* MyScreenshot = UTexture2D::CreateTransient(SrcWidth, SrcHeight, PF_B8G8R8A8);
// 鎖住他的數(shù)據(jù),以便修改
uint8* MipData = static_cast(MyScreenshot->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE));
// 創(chuàng)建紋理數(shù)據(jù)
uint8* DestPtr = NULL;
const FColor* SrcPtr = NULL;
for (int32 y = 0; y
{
DestPtr = &MipData[(SrcHeight - 1 - y) * SrcWidth * sizeof(FColor)];
SrcPtr = const_cast(&SrcData[(SrcHeight - 1 - y) * SrcWidth]);
for (int32 x = 0; 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 endregion4.我這里建圖片路徑放在工程的相對(duì)路徑下,調(diào)用GetLocalTexture函數(shù),獲取Texture2D
void AMyProjectGameMode::BeginPlay()
{
const FString _FilePath = FPaths::GameDir() + "video_logo.png";
_UITex = GetLocalTexture(_FilePath);
}5.注意別忘了,需要添加兩個(gè)頭文件
#include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapper.h"
#include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapperModule.h"6.運(yùn)行截圖,我這里將獲取的圖片放在了UI界面上
7.我在讀取jpg格式的圖片的時(shí)候,顏色明顯不對(duì),讀png的格式的時(shí)候,就完全正常,還未去尋找原因
總結(jié)
以上是生活随笔為你收集整理的ue4加载本地图片_UE4 读取本地图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ColorMatrix 矩阵效果,即美图
- 下一篇: 写给女朋友的java_Java会说情话的