Getting asset thumbnails as a Texture2D

Basing off the staff’s post

I repurposed it for your thumbnail gen.

.build file needs "ImageWrapper" in dependencies

Includes

#include "IImageWrapper.h" 
#include "IImageWrapperModule.h" 

void UMBMaterialAssignmentSlot::SetSlotParams(const FAssetData& AssetData) {
    
    UTexture2D* CreatedTexture = nullptr;
    
    FString PackageFilename;
    const FName ObjectFullName = FName(*AssetData.GetFullName());
    TSet<FName> ObjectFullNames;
    ObjectFullNames.Add(ObjectFullName);
    if (FPackageName::DoesPackageExist(AssetData.PackageName.ToString(), &PackageFilename))
    {
        FThumbnailMap ThumbnailMap;
        ThumbnailTools::LoadThumbnailsFromPackage(PackageFilename, ObjectFullNames,
            ThumbnailMap);
                
        FObjectThumbnail* objTN = ThumbnailMap.Find(ObjectFullName);             

        IImageWrapperModule& ImageWrapperModule = FModuleManager::Get().LoadModuleChecked<IImageWrapperModule>(TEXT("ImageWrapper"));
        TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);

        ImageWrapper->SetRaw(objTN->GetUncompressedImageData().GetData(), objTN->GetUncompressedImageData().Num(), objTN->GetImageWidth(), objTN->GetImageHeight(), ERGBFormat::BGRA, 8);
        const TArray64<uint8>& CompressedByteArray = ImageWrapper->GetCompressed();

         CreatedTexture = FImageUtils::ImportBufferAsTexture2D(CompressedByteArray);        
                 
        MeshImage->SetBrushFromTexture(CreatedTexture);
    }    
}
2 Likes