SharpAstro.Codecs.Abstractions 3.16.961

This package has a SemVer 2.0.0 package version: 3.16.961+b7a2062eb4b39115a57202a59516bb115a0cd0cc.
There is a newer version of this package available.
See the version list below for details.
dotnet add package SharpAstro.Codecs.Abstractions --version 3.16.961
                    
NuGet\Install-Package SharpAstro.Codecs.Abstractions -Version 3.16.961
                    
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="SharpAstro.Codecs.Abstractions" Version="3.16.961" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SharpAstro.Codecs.Abstractions" Version="3.16.961" />
                    
Directory.Packages.props
<PackageReference Include="SharpAstro.Codecs.Abstractions" />
                    
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 SharpAstro.Codecs.Abstractions --version 3.16.961
                    
#r "nuget: SharpAstro.Codecs.Abstractions, 3.16.961"
                    
#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 SharpAstro.Codecs.Abstractions@3.16.961
                    
#: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=SharpAstro.Codecs.Abstractions&version=3.16.961
                    
Install as a Cake Addin
#tool nuget:?package=SharpAstro.Codecs.Abstractions&version=3.16.961
                    
Install as a Cake Tool

SharpAstro Codecs

NuGet CI/CD

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

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, .jb2):
dotnet add package SharpAstro.Codecs

# ...or reference just the format(s) you need:
dotnet add package SharpAstro.Png
dotnet add package SharpAstro.Jxr

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (11)

Showing the top 5 NuGet packages that depend on SharpAstro.Codecs.Abstractions:

Package Downloads
SharpAstro.Png

Pure-managed PNG encoder + decoder for .NET. Writer: adaptive per-row filter selection (libpng "minimum sum of absolute values" heuristic), 8/16-bit RGBA/Gray. Reader: chunk parsing with CRC validation, color types 0/2/4/6 at 8/16-bit. Both sides handle iCCP / sRGB / gAMA / cHRM / eXIf metadata plus PNG-3 HDR signaling chunks cICP (Coding-Independent Code Points), mDCv (Mastering Display Color Volume), cLLI (Content Light Level Info) — full HDR10 / HLG round-trip. Also exports PngPredictor as a reusable row-unfilter building block (TIFF Predictor=2 / PDF FlateDecode). AOT-compatible.

SharpAstro.Color.Icc

ICC v4 colour-management primitives for .NET image-codec consumers. Bundled sRGB v4 profile (588-byte LittleCMS-generated, ReadOnlyMemory<byte> for embedding in TIFF/PNG/JPEG) plus a WithCicp(...) helper that injects an ICC v4.4 cicp tag carrying H.273 colour-primaries / transfer-function codepoints, so HDR10, HLG, wide-gamut, and linear-scene-light signalling can be added on top of any base profile. The H.273 ColorPrimaries / TransferFunction / MatrixCoefficients enums (shared with SharpAstro.Png's PNG-3 cICP chunk) live in SharpAstro.Codecs.Abstractions as of 3.5. AOT-compatible.

SharpAstro.Tiff

Pure-managed TIFF reader/writer for .NET. Supports multi-page, 8/16/32-bit uint and IEEE-Float samples, Uncompressed/Deflate/ZlibPkzip/LZW, Predictor 2 (horizontal differencing) on read, contig planar config, SampleFormat/SMin/SMax/ICC round-trip, both II and MM byte order. AOT-compatible.

SharpAstro.Jpeg

Pure-managed JPEG (ITU-T T.81 / ISO 10918) codec for .NET. Decoder: baseline sequential + progressive DCT, restart intervals, 4:4:4 / 4:2:2 / 4:2:0 / arbitrary chroma subsampling, grayscale, YCbCr, RGB-marked, and Adobe CMYK / YCCK (APP14) streams, plus scaled decode at 1/2, 1/4, 1/8 resolution via reduced inverse DCT — a 33-megapixel source can decode straight to a thumbnail-sized raster without the full-resolution intermediate ever existing. Encoder (3.6): baseline sequential DCT, 4:4:4 / 4:2:0, quality 1..100 — a faithful port of the stb_image_write JPEG writer, byte-for-byte identical to that reference. Decode-to-caller-buffer API with ArrayPool-backed internals; JpegSegmentScanner surfaces APPn metadata segments. Full-scale decode is byte-exact against the StbImageSharp (stb_image) reference decoder. AOT-compatible.

SharpAstro.Jxr

Pure-managed JPEG XR (ITU-T T.832 / ISO/IEC 29199-2) encoder/decoder for .NET. AOT-compatible. The codec core is ported faithfully from Microsoft's jxrlib reference implementation and validated bit-exactly against it (byte-for-byte vs JxrEncApp; round-trips through JxrDecApp and Windows Photo / WIC). Reuses SharpAstro.Tiff for the T.833 .jxr container. Current pipeline: single-tile spatial YUV444 BD8 RGB, lossless and lossy, all three overlap levels.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.16.981 21 10/14/2026
3.16.961 44 10/13/2026
3.16.951 314 10/9/2026
3.16.941 115 10/7/2026
3.15.911 94 10/7/2026
3.14.891 3,019 10/7/2026
3.14.871 10,791 9/11/2026
3.14.841 106 9/11/2026
3.14.821 170 9/9/2026
3.14.811 112 9/9/2026
3.14.801 206 9/6/2026
3.13.781 104 9/6/2026
3.12.771 435 9/4/2026
3.11.751 692 8/20/2026
3.10.721 204 8/20/2026
3.9.711 138 8/20/2026
3.8.701 1,880 8/20/2026
3.8.691 4,700 8/2/2026
3.8.681 189 7/29/2026
3.7.651 104 7/28/2026
Loading failed