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" />
                    
Directory.Packages.props
<PackageReference Include="AstcSharp" />
                    
Project file
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
                    
#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
                    
Install as a Cake Addin
#tool nuget:?package=AstcSharp&version=2.0.0
                    
Install as a Cake Tool

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 .astc files
  • 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:

License

See LICENSE for details.

Product 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.

Version Downloads Last Updated
2.0.0 0 6/4/2026
1.2.0 44 6/3/2026
1.1.0 92 5/30/2026
1.0.0 99 5/26/2026
0.9.8 2,842 2/24/2026
0.9.7 114 2/23/2026
0.9.6 128 2/4/2026
0.9.5 109 2/4/2026
0.9.4 124 2/3/2026
0.9.3 115 2/3/2026