AstcSharp 3.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package AstcSharp --version 3.0.0
                    
NuGet\Install-Package AstcSharp -Version 3.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="3.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AstcSharp" Version="3.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 3.0.0
                    
#r "nuget: AstcSharp, 3.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@3.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=3.0.0
                    
Install as a Cake Addin
#tool nuget:?package=AstcSharp&version=3.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
  • Stream-to-stream API (sync + async) that processes one block-row band at a time, bounding memory independently of image size
  • Decode ASTC textures to RGBA32 (LDR) or RGBA float / FP16 (HDR)
  • Encode RGBA32 LDR images to ASTC blocks
  • 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

The API is stream-to-stream: decode and encode read ASTC blocks / pixels from a source Stream and write the result to a destination Stream, processing one block-row band at a time so peak memory is bounded to a single band rather than the whole image. You pass the image dimensions and footprint explicitly — the source holds raw block/pixel data, not an .astc file header. Each method has a synchronous form and an Async form taking a CancellationToken.

Decoding

using AstcSharp;
using AstcSharp.Core;

var footprint = Footprint.FromFootprintType(FootprintType.Footprint4x4);
using var source = File.OpenRead("texture-blocks.bin"); // raw ASTC blocks
using var destination = new MemoryStream();

// LDR: decode to RGBA32
AstcDecoder.DecompressImage(source, destination, width, height, footprint);

// LDR sRGB: apply the spec's sRGB endpoint expansion (output stays sRGB-encoded)
AstcDecoder.DecompressImage(source, destination, width, height, footprint, LdrDecodeMode.Srgb);

// HDR: decode to RGBA float / FP16 Half, written as little-endian channels (RGBA, row-major)
AstcDecoder.DecompressHdrImage(source, destination, width, height, footprint);
AstcDecoder.DecompressHdrImageHalf(source, destination, width, height, footprint);

// Async (e.g. file/network streams)
await AstcDecoder.DecompressImageAsync(source, destination, width, height, footprint, cancellationToken: token);

// UASTC (Basis Universal, always 4x4): decode raw UASTC block data to RGBA8888
UastcDecoder.DecompressImage(uastcSource, destination, width, height);

Encoding

using var pixelSource = new MemoryStream(rgbaPixels); // RGBA32, row-major
using var blockDestination = new MemoryStream();

// Encode an RGBA32 LDR image to ASTC blocks
AstcEncoder.CompressImage(pixelSource, blockDestination, width, height, footprint);
await AstcEncoder.CompressImageAsync(pixelSource, blockDestination, width, height, footprint, token);

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
3.0.1 170 6/5/2026
3.0.0 89 6/5/2026
2.0.0 94 6/4/2026
1.2.0 108 6/3/2026
1.1.0 96 5/30/2026
1.0.0 102 5/26/2026
0.9.8 3,661 2/24/2026
0.9.7 117 2/23/2026
0.9.6 129 2/4/2026
0.9.5 110 2/4/2026
0.9.4 125 2/3/2026
0.9.3 116 2/3/2026