AstcSharp 2.0.0
dotnet add package AstcSharp --version 2.0.0
NuGet\Install-Package AstcSharp -Version 2.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AstcSharp" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AstcSharp" Version="2.0.0" />
<PackageReference Include="AstcSharp" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AstcSharp --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: AstcSharp, 2.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AstcSharp@2.0.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AstcSharp&version=2.0.0
#tool nuget:?package=AstcSharp&version=2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
AstcSharp
A pure C# library for decoding and encoding ASTC (Adaptive Scalable Texture Compression) textures, supporting both LDR and HDR content.
Features
- Managed C#, no native dependencies
- Decode ASTC textures to RGBA32 (LDR) or RGBA float / FP16 (HDR)
- Encode RGBA32 LDR images to ASTC blocks or
.astcfiles - Linear and sRGB LDR decode modes
- All standard block footprints (4x4 to 12x12)
- UASTC LDR decode (Basis Universal), via
UastcDecoder— all 19 LDR modes (single/multi-subset, dual-plane, RGB/RGBA/LA, solid)
Installation
dotnet add package AstcSharp
Usage
Decoding
using AstcSharp;
using AstcSharp.Core;
byte[] astcData = File.ReadAllBytes("texture.astc");
var footprint = Footprint.FromFootprintType(FootprintType.Footprint4x4);
// LDR: decode to RGBA32
Span<byte> ldrPixels = AstcDecoder.DecompressImage(astcData, width, height, footprint);
// LDR sRGB: apply the spec's sRGB endpoint expansion (output stays sRGB-encoded)
Span<byte> srgbPixels = AstcDecoder.DecompressImage(astcData, width, height, footprint, LdrDecodeMode.Srgb);
// HDR: decode to RGBA float
Span<float> hdrPixels = AstcDecoder.DecompressHdrImage(astcData, width, height, footprint);
// UASTC (Basis Universal, always 4x4): decode raw UASTC block data to RGBA8888
Span<byte> uastcPixels = UastcDecoder.DecompressImage(uastcData, width, height);
Encoding
// Encode an RGBA32 LDR image to ASTC blocks
byte[] blocks = AstcEncoder.CompressImage(rgbaPixels, width, height, footprint);
// Encode to a complete .astc file (16-byte header + blocks)
byte[] astcFile = AstcEncoder.CompressToAstcFile(rgbaPixels, width, height, footprint);
Performance
AstcSharp's decoding performance is competitive with ARM's C++ implementation, with some overhead due to being a pure C# implementation.
| Method | Categories | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|----------------- |----------- |--------------:|-------------:|-------------:|-------:|--------:|----------:|------------:|
| Arm_Decode | Decode | 37.62 us | 0.582 us | 0.486 us | 1.00 | 0.00 | - | NA |
| AstcSharp_Decode | Decode | 26.53 us | 0.357 us | 0.316 us | 0.71 | 0.01 | - | NA |
| | | | | | | | | |
| Arm_Encode | Encode | 828.34 us | 8.152 us | 7.625 us | 1.00 | 0.00 | - | NA |
| AstcSharp_Encode | Encode | 164,935.80 us | 2,025.726 us | 1,894.865 us | 199.13 | 2.42 | 16764 B | NA |
Future improvements
- 3D block types
- HDR encoding (encoding currently supports LDR only)
References
This implementation is based on:
- ASTC Specification: Khronos Data Format Specification - The official ASTC texture compression format specification
- ARM ASTC Codec: github.com/ARM-software/astc-encoder
- Google astc-codec: github.com/google/astc-codec
License
See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.