以下是一个基本的蓝图,可以按像素读取图片的灰度值,然后将其存储在一个数组中。你可以将其作为一个actor使用,然后在其他的actor中调用它。

image

步骤:

  1. 从Actor类创建一个新的蓝图。
  2. 添加一个Texture2D变量,用于存储要读取的图片。
  3. 添加一个Dynamic Material Instance变量,用于创建材质实例,以便可以使用像素操作。
  4. 添加一个数组变量,用于存储图像的灰度值。
  5. 添加一个构造函数,将Dynamic Material Instance设置为渲染材质,并将其添加到场景中。
  6. 添加一个函数,用于读取图像的灰度值。
// 1. 添加一个Texture2D变量,用于存储要读取的图片
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = 'Image')
UTexture2D* Image;

// 2. 添加一个Dynamic Material Instance变量,用于创建材质实例,以便可以使用像素操作
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = 'Image')
UDynamicMaterialInstance* DynamicMaterial;

// 4. 添加一个数组变量,用于存储图像的灰度值
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = 'Image')
TArray<float> ImageData;

// 5. 添加一个构造函数,将Dynamic Material Instance设置为渲染材质,并将其添加到场景中
AMyActor()
{
    // 创建动态材质实例
    DynamicMaterial = UMaterialInstanceDynamic::Create(Material, this);

    // 将动态材质实例设置为渲染材质
    SetMaterial(0, DynamicMaterial);
}

// 6. 添加一个函数,用于读取图像的灰度值
UFUNCTION(BlueprintCallable, Category = 'Image')
void ReadImage()
{
    // 获取图像的大小
    int32 Width = Image->GetSizeX();
    int32 Height = Image->GetSizeY();

    // 获取材质实例的纹理参数
    UTexture* Texture = DynamicMaterial->GetTextureParameterValue(TEXT('Image'));
    UTexture2D* Texture2D = Cast<UTexture2D>(Texture);
    FTexture2DMipMap& Mip = Texture2D->PlatformData->Mips[0];
    void* Data = Mip.BulkData.Lock(LOCK_READ_ONLY);

    // 计算每个像素的灰度值,并将其存储在数组中
    for (int32 Y = 0; Y < Height; Y++)
    {
        for (int32 X = 0; X < Width; X++)
        {
            // 计算像素的颜色
            FColor Color = ((FColor*)Data)[Y * Width + X];

            // 计算像素的灰度值
            float Grey = 0.299 * Color.R + 0.587 * Color.G + 0.114 * Color.B;

            // 将灰度值存储在数组中
            ImageData.Add(Grey);
        }
    }

    // 解锁纹理数据
    Mip.BulkData.Unlock();
}

现在你可以在其他的actor中调用ReadImage函数,以便读取图像的灰度值并存储在数组中。

UE 蓝图:使用像素读取图像灰度值并存储在数组中

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

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