UE4 將本地圖片轉成UTexture2D 在runtime顯示


UFUNCTION(BlueprintCallable, Category = "TextureFromDisk")
        static class UTexture2D* GetTexture2DFromDiskFile(const FString& FilePath);
class UTexture2D* UTextureFromDiskFunctionLibrary::GetTexture2DFromDiskFile(const FString& FilePath)
{
    TArray<uint8> RawFileData;
    UTexture2D* MyTexture = NULL;
    if (FFileHelper::LoadFileToArray(RawFileData, *FilePath /*"<path to file>"*/))
    {
        IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
        // Note: PNG format.  Other formats are supported
        IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);
        if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))
        {
            const TArray<uint8>* UncompressedBGRA = NULL;
            if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
            {
                // Create the UTexture for rendering
                MyTexture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);

                // Fill in the source data from the file
                void* TextureData = MyTexture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
                FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());
                MyTexture->PlatformData->Mips[0].BulkData.Unlock();

                // Update the rendering resource from data.
                MyTexture->UpdateResource();
            }
        }
    }
    return MyTexture;
}

別忘記頭文件的引用

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM