【UE】UWidget控件转换为Texture2D

我是写在函数库里
.h

 UFUNCTION(BlueprintCallable)
 static UTexture2D* RenderWidgetToTexture(UUserWidget* Widget, int32 Width, int32 Height);

.cpp

UTexture2D* UMyBlueprintFunctionLibrary::RenderWidgetToTexture(UUserWidget* Widget, int32 Width, int32 Height)
{
    if (!Widget)
    {
        return nullptr;
    }

    // 创建一个新的RenderTarget
    UTextureRenderTarget2D* RenderTarget = NewObject<UTextureRenderTarget2D>();
    RenderTarget->InitAutoFormat(Width, Height);
    RenderTarget->UpdateResourceImmediate(true);

    // 创建一个新的WidgetRenderer
    FWidgetRenderer WidgetRenderer(true);
    WidgetRenderer.DrawWidget(RenderTarget, Widget->TakeWidget(), FVector2D(Width, Height), 0.0f);

    // 从RenderTarget中读取像素并创建Texture2D
    FTextureRenderTargetResource* RenderTargetResource = RenderTarget->GameThread_GetRenderTargetResource();
    TArray<FColor> Bitmap;
    RenderTargetResource->ReadPixels(Bitmap);

    UTexture2D* Texture = UTexture2D::CreateTransient(Width, Height);
    if (!Texture)
    {
        return nullptr;
    }

    void* TextureData = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
    FMemory::Memcpy(TextureData, Bitmap.GetData(), Bitmap.Num() * sizeof(FColor));
    Texture->PlatformData->Mips[0].BulkData.Unlock();

    Texture->UpdateResource();

    return Texture;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值