AstcSharp 1.2.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package AstcSharp --version 1.2.0
NuGet\Install-Package AstcSharp -Version 1.2.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="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AstcSharp" Version="1.2.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 1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: AstcSharp, 1.2.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@1.2.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=1.2.0
#tool nuget:?package=AstcSharp&version=1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
AstcSharp
A pure C# library for decoding 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)
- 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
using AstcSharp;
using AstcSharp.Core;
byte[] astcData = File.ReadAllBytes("texture.astc");
var footprint = Footprint.FromFootprintType(FootprintType.Footprint4x4);
// LDR: decode to RGBA8888
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);
Performance
AstcSharp's performance is competitive with ARM's C++ implementation, with some overhead due to being a pure C# implementation.
LDR
| Method | FileName | Mean | Error | StdDev | Median | Allocated |
|--------------------------- |---------------- |-------------:|-----------:|-----------:|-------------:|----------:|
| AstcSharp_DecompressLdr | footprint-4x4 | 13.577 us | 0.1627 us | 0.1443 us | 13.564 us | - |
| AstcSharp_DecompressHdr | footprint-4x4 | 16.575 us | 0.3153 us | 0.2633 us | 16.533 us | - |
| ArmReference_DecompressLdr | footprint-4x4 | 11.191 us | 0.1550 us | 0.1374 us | 11.141 us | - |
| ArmReference_DecompressHdr | footprint-4x4 | 13.932 us | 0.3439 us | 1.0141 us | 14.062 us | - |
| AstcSharp_DecompressLdr | footprint-12x12 | 4.384 us | 0.0670 us | 0.0688 us | 4.357 us | - |
| AstcSharp_DecompressHdr | footprint-12x12 | 7.733 us | 0.1528 us | 0.1819 us | 7.667 us | - |
| ArmReference_DecompressLdr | footprint-12x12 | 7.770 us | 0.0729 us | 0.0682 us | 7.767 us | - |
| ArmReference_DecompressHdr | footprint-12x12 | 7.920 us | 0.0510 us | 0.0426 us | 7.923 us | - |
| AstcSharp_DecompressLdr | rgba-4x4 | 962.404 us | 19.2086 us | 32.6176 us | 955.002 us | - |
| AstcSharp_DecompressHdr | rgba-4x4 | 1,134.736 us | 22.2962 us | 34.7125 us | 1,144.305 us | - |
| ArmReference_DecompressLdr | rgba-4x4 | 734.388 us | 14.5948 us | 35.2481 us | 722.839 us | - |
| ArmReference_DecompressHdr | rgba-4x4 | 716.613 us | 14.0726 us | 18.7865 us | 710.109 us | - |
| AstcSharp_DecompressLdr | rgba-8x8 | 422.630 us | 8.2009 us | 8.0543 us | 422.920 us | - |
| AstcSharp_DecompressHdr | rgba-8x8 | 629.957 us | 10.5187 us | 15.0857 us | 624.104 us | - |
| ArmReference_DecompressLdr | rgba-8x8 | 480.440 us | 3.3241 us | 3.1094 us | 479.974 us | - |
| ArmReference_DecompressHdr | rgba-8x8 | 492.185 us | 4.7352 us | 4.1977 us | 491.723 us | - |
Future improvements
- 3D block types
- Encoding
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.