UE – 通过位置读取UTexture2D类的颜色

内容纲要
FLinearColor ReadColorFromTexture(UTexture2D* Texture2D, FVector2D Position)
{
    if (Texture2D)
    {
        FColor PixelColor = FColor();
        // 新建一个FColor指针,ImageData用于储存纹理所有位置的颜色信息
        const FColor* ImageData =
            static_cast<const FColor*>(Texture2D->GetPlatformData()->Mip[0].BulkData.LockReadOnly());
        // 由于2X2的纹理的颜色信息会被坍缩成一维,所以用想得到的Y坐标*纹理X的长度
        // 从而得到指定的Y行,再加上X作为Y行的偏移就能从一维中解析出具体位置的颜色了。
        PixelColor = ImagedData[static_cast<int32>(Pos.Y) * Texture2D->GetSizeX() + static_cast<int32(Pos.X>];
        //解锁刚才锁定的,然后直接返回为FLinearColor
        Texture2D->GetPlatformData->Mip[0].BulkData.Unlock();
        return FLinearColor(PixelColor);
    }
}

Related Posts

发表回复

同步Schの秘密防空洞