讀取本地圖片
程式碼實現
build.cs
新增 ImageWrapper
模組,使用時注意新增相關標頭檔案
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ImageWrapper" });
-
支援圖片型別
png
jpg
bmp
ico
exr
icns
-
注意
jpg
讀取後 R 和 B 的通道位置ERGBFormat::RGBA
、PF_R8G8B8A8
→ERGBFormat::BGR
、PF_B8G8R8A8
在虛幻引擎中,要將本地圖片轉換為 UTexture2D
型別,你可以使用以下步驟:
-
載入圖片檔案: 使用
FImageUtils::ImportFileAsTexture2D
函式或自定義載入函式將圖片檔案載入為UTexture2D
物件。 -
示例程式碼:
cppCopy Code#include "ImageUtils.h" #include "Engine/Texture2D.h" UTexture2D* LoadImageAsTexture2D(const FString& FilePath) { TArray<uint8> ImageData; if (FFileHelper::LoadFileToArray(ImageData, *FilePath)) { IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(TEXT("ImageWrapper")); TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG); // Assuming PNG format if (ImageWrapper->SetCompressed(ImageData.GetData(), ImageData.Num())) { TArray<uint8> UncompressedRGBA; if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA)) { UTexture2D* Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight()); if (Texture) { void* TextureData = Texture->PlatformData->Mips[0].BulkData.GetAllocation(); FMemory::Memcpy(TextureData, UncompressedRGBA.GetData(), UncompressedRGBA.Num()); Texture->UpdateResource(); return Texture; } } } } return nullptr; }
-
使用場景: 你可以將此函式用於動態載入和顯示本地圖片作為紋理,例如在使用者介面或遊戲中使用。
確保正確處理圖片格式和檔案路徑,並根據需要調整程式碼以適應不同的影像格式。
程式碼解析
這段示例程式碼的作用是將本地圖片檔案載入並轉換為虛幻引擎中的 UTexture2D
物件。以下是程式碼的逐步解釋:
- 載入圖片檔案:
FFileHelper::LoadFileToArray
用於讀取指定路徑的圖片檔案,並將其資料儲存到ImageData
陣列中。
- 建立圖片包裝器:
IImageWrapperModule
模組用來處理不同格式的圖片,ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG)
建立一個用於處理 PNG 格式圖片的包裝器。
- 設定壓縮資料:
ImageWrapper->SetCompressed
將圖片資料傳遞給包裝器。
- 解壓縮資料:
ImageWrapper->GetRaw
從包裝器中提取解壓縮的RGBA
資料。
- 建立
UTexture2D
物件:UTexture2D::CreateTransient
建立一個臨時的UTexture2D
物件,大小與圖片相匹配。Texture->PlatformData->Mips[0].BulkData.GetAllocation()
獲取紋理的資料區域,並將解壓縮的圖片資料複製到這個區域。
- 更新資源:
Texture->UpdateResource()
更新紋理資源,使其可用於渲染。
- 返回紋理物件:
- 最後返回建立的
UTexture2D
物件。
- 最後返回建立的
這樣,你可以動態載入本地圖片,並在虛幻引擎中將其作為紋理使用。
擴充
圖片包裝器(Image Wrapper
)是一個處理圖片格式的工具,它負責將圖片資料從各種格式(如 PNG
、JPEG
)解碼成原始畫素資料。虛幻引擎中的 IImageWrapper
介面和相關模組(如 IImageWrapperModule
)提供了對圖片格式的支援,允許你讀取、解碼和處理不同型別的影像檔案。透過這些包裝器,你可以將圖片檔案轉換為可以在引擎中使用的紋理格式。