1.从Http协议获取到图片二进制数据,以下是Http请求后的回调函数。
void UDowmLoadIMG::OnProcessRequestComplete(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
//
TArray<uint8> arraydata = Response->GetContent();
if (!bWasSuccessful)
{
UE_LOG(LogTemp, Warning, TEXT("DownLoad Fail"));
int32 Code = Response->GetResponseCode();
FString Conntnet = Response->GetContentAsString();
OnFail.Broadcast(Conntnet,Code,nullptr);
return;
}
else
{
//图片是什么格式的就需要创建什么格式的Wrapper
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
TSharedPtr<IImageWrapper> ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::PNG);
TSharedPtr<IImageWrapper> ImageWrapperJPEG = ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);
if (arraydata.Num() >0)
{
//设置压缩
ImageWrapperJPEG->SetCompressed(arraydata.GetData(), arraydata.Num());
int Hight = ImageWrapperJPEG->GetHeight();
int Width = ImageWrapperJPEG->GetWidth();
const TArray<uint8>* compressedRGBA = nullptr;
//获取压缩后的数据
if (ImageWrapperJPEG->GetRaw(ERGBFormat::BGRA, 8, compressedRGBA))
{
const TArray<uint8> compressedData = *compressedRGBA;
//创建临时的UTexture2D
UTexture2D* outIMG = UTexture2D::CreateTransient(ImageWrapperJPEG->GetWidth(), ImageWrapperJPEG->GetHeight());
//把获取的压缩数据写入到UTexture2D里面
if (outIMG)
{
void* TextureData = outIMG->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(TextureData, compressedData.GetData(), compressedData.Num());
outIMG->PlatformData->Mips[0].BulkData.Unlock();
outIMG->UpdateResource();
}
//代理分发
OnScuess.Broadcast(Response->GetContentAsString(), Response->GetResponseCode(), outIMG);
return;
}
}
return;
}
}