思路

之前踩的坑,网上都说是对Bulkdata进行操作,但是实操会报错闪退,大概是因为内部的贴图压缩过还存有其他数据,bulkdata里面不只有像素数据。正确的方法是获得source然后使用GetMipData函数直接获取。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void UFunctionLibrary::ReadTexture(UTexture2D* Src)
{
TArray64<uint8> RawData;
if (Src->Source.IsValid() && Src->Source.GetFormat() == TSF_BGRA8)
{
Src->Source.GetMipData(RawData, 0);
}
else
{
UE_LOG(LogTexture, Warning, TEXT("%s: Source Not Available"), *Src->GetName());
return;
}
FColor* SrcColor = reinterpret_cast<FColor*>(RawData.GetData());
}

然后可以处理后传出FColor数组,使用我之前写过的创建贴图资源的函数直接储存贴图,也就是这篇文章