首页
/ BCnEncoder.NET 使用教程

BCnEncoder.NET 使用教程

2025-04-18 07:24:12作者:农烁颖Land

1. 项目介绍

BCnEncoder.NET 是一个跨平台的 .NET 库,用于将 RGBA 图像压缩到不同的块压缩格式。它不依赖本地代码,并且与 .NET Standard 2.1 兼容。支持的格式包括:

  • 原始无符号字节 R、RG、RGB 和 RGBA 格式
  • BC1 (S3TC DXT1)
  • BC2 (S3TC DXT3)
  • BC3 (S3TC DXT5)
  • BC4 (RGTC1)
  • BC5 (RGTC2)
  • BC6 (BPTC_FLOAT)
  • BC7 (BPTC)

该库当前处于开发阶段,但已经可以使用。开发者计划实现更多编解码器和不同算法的支持。当前版本能够编码和解码 BC1 到 BC7 图像,格式为 KTX 或 DDS。

2. 项目快速启动

首先,确保你的开发环境已经安装了 .NET SDK。

安装 BCnEncoder.NET

通过 NuGet 包管理器安装 BCnEncoder.NET:

Install-Package BCnEncoder.NET

编码图像

以下是如何使用 BCnEncoder.NET 将 PNG 图像编码为 BC1 格式并保存为 KTX 文件的示例:

using BCnEncoder;
using BCnEncoder.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

// 加载 PNG 图像
Image<Rgba32> image = Image.Load<Rgba32>("example.png");

// 创建编码器实例
BcEncoder encoder = new BcEncoder();

// 设置输出选项
encoder.OutputOptions.GenerateMipMaps = true;
encoder.OutputOptions.Quality = CompressionQuality.Balanced;
encoder.OutputOptions.Format = CompressionFormat.Bc1;
encoder.OutputOptions.FileFormat = OutputFileFormat.Ktx;

// 编码图像并保存到文件
using FileStream fs = File.OpenWrite("example.ktx");
encoder.EncodeToStream(image, fs);

解码图像

以下是如何从 KTX 文件中解码 BC1 格式图像并将其保存为 PNG 文件的示例:

using BCnEncoder;
using SixLabors.ImageSharp;

// 打开 KTX 文件
using FileStream fs = File.OpenRead("compressed_bc1.ktx");

// 创建解码器实例
BcDecoder decoder = new BcDecoder();

// 解码图像
using Image<Rgba32> image = decoder.DecodeToImageRgba32(fs);

// 保存解码后的图像
using FileStream outFs = File.OpenWrite("decoding_test_bc1.png");
image.SaveAsPng(outFs);

3. 应用案例和最佳实践

案例一:HDR 图像编码

若要编码 HDR 图像为 BC6H 格式,可以使用以下代码:

// 读取 HDR 图像
HdrImage image = HdrImage.Read("example.hdr");

// 创建编码器实例
BcEncoder encoder = new BcEncoder();

// 设置输出选项
encoder.OutputOptions.GenerateMipMaps = true;
encoder.OutputOptions.Quality = CompressionQuality.Balanced;
encoder.OutputOptions.Format = CompressionFormat.Bc6U;
encoder.OutputOptions.FileFormat = OutputFileFormat.Ktx;

// 编码图像并保存到文件
using FileStream fs = File.OpenWrite("example.ktx");
encoder.EncodeToStreamHdr(image.PixelMemory, fs);

案例二:解码 BC6H 格式图像

以下是如何解码 BC6H 格式的文件:

// 打开 BC6H 编码的文件
using FileStream fs = File.OpenRead("compressed_bc6.ktx");

// 创建解码器实例
BcDecoder decoder = new BcDecoder();

// 解码图像
Memory2D<ColorRgbFloat> pixels = decoder.DecodeHdr2D(fs);

// 创建 HDR 图像
HdrImage decodedImage = new HdrImage(pixels.Span);

// 保存解码后的 HDR 图像
using FileStream outFs = File.OpenWrite("decoded.hdr");
decodedImage.Write(outFs);

4. 典型生态项目

目前,BCnEncoder.NET 项目的主要生态项目包括与 ImageSharp 的集成。ImageSharp 是一个强大的图像处理库,可以与 BCnEncoder.NET 结合使用,以简化图像的编码和解码过程。

以上是 BCnEncoder.NET 的基本使用教程,你可以根据具体需求调整编码和解码的参数,以达到最佳的效果。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K