AstcSharp 3.0.0
See the version list below for details.
dotnet add package AstcSharp --version 3.0.0
NuGet\Install-Package AstcSharp -Version 3.0.0
<PackageReference Include="AstcSharp" Version="3.0.0" />
<PackageVersion Include="AstcSharp" Version="3.0.0" />
<PackageReference Include="AstcSharp" />
paket add AstcSharp --version 3.0.0
#r "nuget: AstcSharp, 3.0.0"
#:package AstcSharp@3.0.0
#addin nuget:?package=AstcSharp&version=3.0.0
#tool nuget:?package=AstcSharp&version=3.0.0
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:
- 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. |
-
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.