UE5 Oodle图像压缩

        UTexture2D* Texture = nullptr;
		Texture = FImageUtils::ImportFileAsTexture2D(TexFilePath);
		bool bGenMips = false;
		if(bCompressImage)
		{
			FTextureBuildSettings BuildSettings;
			BuildSettings.TextureFormatName = "TFO_AutoDXT";
			BuildSettings.MipGenSettings = TMGS_NoMipmaps;
			ITextureFormatManagerModule* TFM = GetTextureFormatManager();
			if (const ITextureFormat* TextureFormat = TFM->FindTextureFormat(BuildSettings.TextureFormatName))
			{
				FTexture2DMipMap& MipMap = Texture->GetPlatformData()->Mips[0];
				FImage Image;
				Image.SizeX = MipMap.SizeX;
				Image.SizeY = MipMap.SizeY;
				Image.NumSlices = 1;
				Image.Format = ERawImageFormat::BGRA8; 
				Image.RawData.SetNumUninitialized(MipMap.SizeX * MipMap.SizeY * 4);
				FMemory::Memcpy(Image.RawData.GetData(), MipMap.BulkData.LockReadOnly(), Image.RawData.Num());
				MipMap.BulkData.Unlock();
				
				FCompressedImage2D CompressedImage;
				FIntVector3 Extent;
				TextureFormat->CompressImage(Image, BuildSettings, Extent, 1, 0, 1, Texture->GetPathName(), false, CompressedImage);

				// UE_LOG( LogTemp, Warning, TEXT("MipMap.BulkData.GetElementCount() = %d"), MipMap.BulkData.GetElementCount());
				// UE_LOG( LogTemp, Warning, TEXT("CompressedImage.RawData.Num() = %d"), CompressedImage.RawData.Num());

				MipMap.FileRegionType = FFileRegion::SelectType(EPixelFormat(CompressedImage.PixelFormat));
				MipMap.BulkData.Lock(LOCK_READ_WRITE);
				FMemory::Memcpy(MipMap.BulkData.Realloc(CompressedImage.RawData.Num()), CompressedImage.RawData.GetData(), CompressedImage.RawData.Num());
				MipMap.BulkData.Unlock();
				Texture->GetPlatformData()->PixelFormat =(EPixelFormat(CompressedImage.PixelFormat));

				Texture->UpdateResource();
			}
			
		}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值