SharpAstro.Color.Icc
3.7.651
dotnet add package SharpAstro.Color.Icc --version 3.7.651
NuGet\Install-Package SharpAstro.Color.Icc -Version 3.7.651
<PackageReference Include="SharpAstro.Color.Icc" Version="3.7.651" />
<PackageVersion Include="SharpAstro.Color.Icc" Version="3.7.651" />
<PackageReference Include="SharpAstro.Color.Icc" />
paket add SharpAstro.Color.Icc --version 3.7.651
#r "nuget: SharpAstro.Color.Icc, 3.7.651"
#:package SharpAstro.Color.Icc@3.7.651
#addin nuget:?package=SharpAstro.Color.Icc&version=3.7.651
#tool nuget:?package=SharpAstro.Color.Icc&version=3.7.651
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 |
| 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 | 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.7.651)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SharpAstro.Color.Icc:
| 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. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.7.651 | 11 | 7/28/2026 |
| 3.6.561 | 69 | 7/27/2026 |
| 3.6.551 | 903 | 7/6/2026 |
| 3.6.531 | 54 | 7/5/2026 |
| 3.5.511 | 2,016 | 7/5/2026 |
| 3.4.491 | 230 | 7/5/2026 |
| 3.4.471 | 167 | 7/5/2026 |
| 3.4.451 | 80 | 7/5/2026 |
| 3.4.431 | 61 | 7/4/2026 |
| 3.4.411 | 133 | 7/4/2026 |
| 3.3.391 | 414 | 6/10/2026 |
| 3.3.361 | 552 | 6/1/2026 |
| 3.3.341 | 54 | 5/31/2026 |
| 3.2.311 | 114 | 5/30/2026 |
| 3.2.291 | 51 | 5/30/2026 |
| 3.2.271 | 70 | 5/30/2026 |
| 3.2.251 | 55 | 5/30/2026 |
| 3.1.231 | 69 | 5/30/2026 |
| 3.0.221 | 113 | 5/30/2026 |
| 3.0.211 | 56 | 5/30/2026 |