SharpAstro.Codecs
3.24.1221
dotnet add package SharpAstro.Codecs --version 3.24.1221
NuGet\Install-Package SharpAstro.Codecs -Version 3.24.1221
<PackageReference Include="SharpAstro.Codecs" Version="3.24.1221" />
<PackageVersion Include="SharpAstro.Codecs" Version="3.24.1221" />
<PackageReference Include="SharpAstro.Codecs" />
paket add SharpAstro.Codecs --version 3.24.1221
#r "nuget: SharpAstro.Codecs, 3.24.1221"
#:package SharpAstro.Codecs@3.24.1221
#addin nuget:?package=SharpAstro.Codecs&version=3.24.1221
#tool nuget:?package=SharpAstro.Codecs&version=3.24.1221
SharpAstro Codecs
A family of pure-managed, AOT-compatible image-codec packages for .NET 10 — no native binaries.
Each format ships as an independent NuGet, and SharpAstro.Codecs is a thin facade that sniffs a
byte stream by its magic bytes and dispatches to the right decoder, so a consumer can reference one
package instead of cherry-picking codecs.
| Format | Decode | Encode | Notes |
|---|---|---|---|
| PNG | ✅ | ✅ | 8/16-bit RGBA/Gray, ICC + HDR chunks (cICP / mDCv / cLLI) |
| JPEG | ✅ | ✅ | baseline + progressive; scaled 1/2–1/8 LOD decode; baseline encode. Plus lossless JPEG (T.81 Annex H) as a separate decoder |
| Ultra HDR | ✅ | ✅ | gain-map JPEG; decodes transparently through the facade — float path is HDR, 8-bit path the SDR base |
| TIFF | ✅ | ✅ | multi-page, 8/16/32-bit uint + float, Deflate/Zlib/LZW, Predictor 2 |
| JPEG XR | ✅ | ✅ | jxrlib-exact — codestream byte-identical to the reference encoder |
| OpenEXR | ✅ | ✅ | scanline, HALF/FLOAT/UINT, NONE/RLE/ZIP/ZIPS/PIZ |
| JPEG XL | ✅ | ✅ | clean-room; lossless Modular + lossy VarDCT |
| JBIG2 | ✅ | — | bilevel, for PDF's /JBIG2Decode. Every region type T.88 defines, on the arithmetic path |
| WebP | ✅ | — | VP8 lossy, VP8L lossless, ALPH, animation + seek, ICC/EXIF/XMP metadata |
| EXIF | ✅ | — | metadata only, from JPEG / TIFF / PNG |
See CODECS.md for the full per-package matrix, what each codec does and does not
support, and how to pick the right one. A bundled sRGB ICC profile ships in
SharpAstro.Color.Icc for embedding.
The facade decodes WebP still images and frame 0 of animated WebP. Use
SharpAstro.Webp.WebpDecoder.DecodeAnimation or WebpAnimationDecoder to access animation frames
and seek through the timeline.
All packages target net10.0, are IsAotCompatible, ship SourceLink debugging, and publish in
lockstep (shared Major.Minor + CI run-number patch).
NuGet
# One facade for sniff-and-decode (PNG, JPEG incl. Ultra HDR, TIFF, JXR, EXR, JXL, WebP, .jb2):
dotnet add package SharpAstro.Codecs
# ...or reference just the format(s) you need:
dotnet add package SharpAstro.Png
dotnet add package SharpAstro.Jxr
dotnet add package SharpAstro.Webp
Usage
Decode any supported still image through the facade — sniff the header, size a buffer, decode into it:
using SharpAstro.Codecs;
var bytes = File.ReadAllBytes(path);
if (ImageCodecs.TryReadInfo(bytes, out var info))
{
var rgba = new byte[info.Width * info.Height * 4];
ImageCodecs.TryDecodeIntoRgba8(bytes, rgba); // zero-copy into your buffer
// ...or ImageCodecs.TryDecode(bytes, out IDecodedImage img) for the full-fidelity raster.
}
Each codec is also usable directly — e.g. PngReader / PngWriter, JpegDecoder.Decode / DecodeTo,
TiffReader / TiffWriter, JxrImageCodec, ExrImageCodec, JxlImageCodec. See CODECS.md.
JBIG2 is the one format whose main entry point is not the facade. A PDF-embedded JBIG2 stream has
no file header to sniff, keeps its shared segment dictionaries in a separate /JBIG2Globals stream,
and takes its dimensions from the image dictionary — so those callers pass all three explicitly:
using SharpAstro.Jbig2;
// `embedded` / `globals` are the PDF streams; width/height come from the image dictionary.
var page = Jbig2Decoder.Decode(embedded, globals, width, height);
var bits = page.Bits; // one byte per pixel, 1 = black (T.88 polarity)
var gray = page.ToGray8(); // ...or the 8-bit projection, black 0 / white 255
Standalone .jb2 files do have a signature, and decode through the facade like anything else —
generic, symbol-coded and halftone pages alike.
JBIG2 covers every region type T.88 defines on the arithmetic path: generic regions (both the template coder and MMR / ITU-T T.6, the Group 4 fax coding), refinement regions, symbol dictionaries and text regions, and pattern dictionaries with halftone regions. The Huffman-coded variants (SDHUFF / SBHUFF) are refused rather than guessed at — no available encoder emits them, so an implementation would have nothing to validate itself against.
Building from source
git clone https://github.com/SharpAstro/Codecs
cd Codecs
dotnet build Codecs.JustTests.sln -c Release
dotnet test Codecs.JustTests.sln -c Release
Requires the .NET 10 SDK.
License
Unlicense (public domain).
Credits
This repository began as a fork of StbSharp/StbImageSharp
(Roman Shapiro's C# port of Sean Barrett's stb_image.h, via the
Hebron C-to-C# transpiler). SharpAstro.Jpeg's decoder was
ported from and validated byte-exact against that reference decoder before the stb port itself was
retired from the repo.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- SharpAstro.Codecs.Abstractions (>= 3.24.1221)
- SharpAstro.Exr (>= 3.24.1221)
- SharpAstro.Jbig2 (>= 3.24.1221)
- SharpAstro.Jpeg (>= 3.24.1221)
- SharpAstro.Jpeg.GainMap (>= 3.24.1221)
- SharpAstro.Jpeg2000 (>= 3.24.1221)
- SharpAstro.Jxl (>= 3.24.1221)
- SharpAstro.Jxr (>= 3.24.1221)
- SharpAstro.Png (>= 3.24.1221)
- SharpAstro.Tiff (>= 3.24.1221)
- SharpAstro.Webp (>= 3.24.1221)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on SharpAstro.Codecs:
| Package | Downloads |
|---|---|
|
TianWen.Lib
Astronomical imaging and device-control library for .NET: cameras, mounts, focusers, filter wheels, cover/calibrators and guiders over ASCOM, Alpaca, ZWO, QHYCCD, Meade LX200, Skywatcher, OnStep and PHD2, plus plate solving, deep-sky and planetary stacking, auto-focus and unattended session automation. First-class multi-OTA (dual rig) support. AOT compatible. |
|
|
Console.Lib
Terminal application toolkit for .NET: dock-based layouts that recompute on resize, a widget set (text bars, scrollable lists, tree views, text areas, menus, Markdown), mouse and keyboard input, VT styling, and a fast Sixel graphics encoder with sextant / half-block fallbacks. Built on DIR.Lib, AOT compatible. |
|
|
Console.Lib.Debug
The Debug build of Console.Lib, for Debug consumers that need ConsoleDebugInspector and the other #if DEBUG types, which the Release Console.Lib package does not contain. Same version as Console.Lib, and it depends on DIR.Lib.Debug rather than DIR.Lib. Reference Console.Lib when the configuration is not Debug and Console.Lib.Debug when it is, with a Configuration-conditioned PackageReference; Visual Studio needs a restore after switching configuration. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.24.1221 | 144 | 10/27/2026 |
| 3.23.1201 | 29 | 10/25/2026 |
| 3.22.1171 | 318 | 10/25/2026 |
| 3.21.1151 | 42 | 10/25/2026 |
| 3.20.1121 | 30 | 10/25/2026 |
| 3.19.1091 | 31 | 10/24/2026 |
| 3.18.1061 | 34 | 10/20/2026 |
| 3.17.1041 | 996 | 10/20/2026 |
| 3.16.981 | 42 | 10/14/2026 |
| 3.16.961 | 38 | 10/13/2026 |
| 3.16.951 | 48 | 10/9/2026 |
| 3.16.941 | 43 | 10/7/2026 |
| 3.15.911 | 43 | 10/7/2026 |
| 3.14.891 | 7,175 | 10/7/2026 |
| 3.14.871 | 8,263 | 9/11/2026 |
| 3.14.841 | 51 | 9/11/2026 |
| 3.14.821 | 112 | 9/9/2026 |
| 3.14.811 | 62 | 9/9/2026 |
| 3.14.801 | 161 | 9/6/2026 |
| 3.13.781 | 56 | 9/6/2026 |