UE5 蓝图自定义节点:C++ 实现图片灰度值读取

本文将介绍如何在 UE5 蓝图中创建自定义节点,使用 C++ 代码实现根据输入图片逐像素读取灰度值,并将结果输出到数组。

代码实现

Header 文件 (MyBlueprintFunctionLibrary.h):

#pragma once

#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"

UCLASS()
class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

public:
    UFUNCTION(BlueprintCallable, Category = "MyFunctions")
    static TArray<float> GetGrayscalePixels(UTexture2D* Texture);
};

CPP 文件 (MyBlueprintFunctionLibrary.cpp):

#include "MyBlueprintFunctionLibrary.h"
#include "Engine/Texture2D.h"

TArray<float> UMyBlueprintFunctionLibrary::GetGrayscalePixels(UTexture2D* Texture)
{
    TArray<FColor> Colors;
    Texture->GetMipData(Colors, 0);

    TArray<float> GrayscalePixels;
    GrayscalePixels.SetNumUninitialized(Colors.Num());

    for (int32 i = 0; i < Colors.Num(); i++)
    {
        float Grayscale = (Colors[i].R + Colors[i].G + Colors[i].B) / 3.0f;
        GrayscalePixels[i] = Grayscale;
    }

    return GrayscalePixels;
}

代码解释:

  1. 头文件:声明一个名为 UMyBlueprintFunctionLibrary 的类,继承自 UBlueprintFunctionLibrary,并定义一个名为 GetGrayscalePixels 的静态函数,该函数接受一个 UTexture2D 类型的纹理指针,并返回一个包含灰度值的 TArray<float> 数组。
  2. CPP 文件:实现 GetGrayscalePixels 函数,该函数首先通过 Texture->GetMipData 获取纹理的像素数据,存储在 TArray<FColor> 数组 Colors 中。然后,创建一个同等大小的 TArray<float> 数组 GrayscalePixels,用于存储灰度值。最后,循环遍历每个像素的颜色,计算其灰度值,并将结果存储在 GrayscalePixels 数组中。

使用方法

在 UE5 蓝图中,你可以使用这个自定义节点来读取图片的灰度值。只需将一个 Texture2D 类型的图片连接到节点的输入端口,即可得到包含灰度值的数组。

示例:

// 获取图片的灰度值
GrayscalePixels = GetGrayscalePixels(ImageTexture);

// 使用灰度值进行其他操作
...

总结

本文提供了一个在 UE5 蓝图中创建自定义节点,并使用 C++ 代码实现图片灰度值读取的完整示例。通过使用 C++ 代码,你可以扩展 UE5 蓝图的功能,实现更复杂的操作。

UE5 蓝图自定义节点:C++ 实现图片灰度值读取

原文地址: https://www.cveoy.top/t/topic/jtHT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录