Limitations

edit

The library never decodes or encodes a file approximately: a feature it does not support throws an UnsupportedImageFeatureException, and a conversion that would lose information needs an explicit setting. This page lists the main gaps. Each format page gives the details of its format.

General

  • No extension points. There is no public allocator, custom pixel type, codec plug-in or custom image processor.
  • No CMYK pixel format. CMYK JPEG and TIFF files are converted to RGB when they are loaded, with an explicit CmykConversion option; CMYK cannot be written. See Color management.
  • No floating-point grayscale. RgbaFloat and RgbaHalf are the floating-point formats. OpenEXR and TIFF read and write them; the other encoders need an explicit reduction to 16 bits.
  • No scaled or region decoding. An image is decoded at its full size; resize it afterward.
  • Color profiles are never applied implicitly. Colors change only when you convert them (ConvertColorProfile). See Color management.
  • Color management covers ICC versions 2 and 4 grayscale, RGB and CMYK profiles, and device-link and abstract profiles in sequences of profiles; no iccMAX or named-color profiles. CMYK samples are not a pixel format and no encoder writes them. Gamut mapping is per-channel clipping or a chroma reduction, opt-in.

Formats

FormatMain limitations
JPEGHierarchical JPEG, JPEG-LS and lossless JPEG with arithmetic coding are not read. Writing is 8-bit baseline or progressive only (no 12-bit, lossless, arithmetic or CMYK), one frame. Gain maps are only read by AuxiliaryImageCollection and are not written.
GIFAt most 256 colors per frame and one fully transparent color; plain-text extensions are rejected.
PNG / APNGSub-byte grayscale requires PngOptimization.MinimumSize or PngOptimization.Layout (still images), and APNG delta rectangles OptimizeFrames or MinimumSize; palettes are selected by MinimumSize, Layout or PngPixelLayout.Indexed. Sequential writers fix their layout and palette from the first image. Unknown ancillary chunks are not kept.
WebP8-bit RGB(A) only; lossy output is 4:2:0; animations need a seekable destination.
QOI8-bit RGB(A) only, one still image, no metadata.
BMPNo embedded JPEG/PNG payloads, no embedded ICC profile; one still image is written.
TGANo premultiplied alpha; true-color and grayscale output only, no metadata.
NetpbmOnly the first image of a concatenation is read; no metadata.
TIFFOld-style JPEG compression, YCbCr data in separate planes, L*a*b* and some extra-sample layouts are not read. Writing uses chunky samples (no separate planes), one page per Save (use ImageCollection for documents) and a seekable destination.
ICO / CURAt most 256 pixels per side; 32-bit DIB or PNG representations are written.
ANIOne representation per frame; always loops; needs a seekable destination.
AVIFGain maps, depth maps and thumbnails are only read by AuxiliaryImageCollection; gain maps are not written. Sequences need a seekable destination; the encoder is single-threaded except for grid tiles.
HEICBit depths above 12, multilayer and 3D extensions are not read; bursts and live-photo videos are ignored, depth maps, thumbnails and gain maps are only read by AuxiliaryImageCollection (Apple's gain map parameters, in maker notes, are not read). Sequences need a seekable destination.
JPEG XLFloating-point samples, more than 16 bits, premultiplied alpha and CMYK are not read; lossy decoding is close to, not identical with, the reference decoder. Writing has no layers or blending.
JPEG 2000Signed samples, more than 16 bits and Part 2 extensions are not read; no decoding of fewer quality layers; a region decode reads the whole compressed data of each tile it meets. Writing has no precincts and no tile-parts beyond one per tile; HTJ2K output has one quality layer and no HT refinement passes.
OpenEXRMulti-part files, deep data, DWA/HTJ2K/ZSTD compressions and chroma (RY, BY) channels are not read; other channels than R, G, B, A and Y, and an overscan, need a layer or a window mode (OpenExrDecodingOptions). Writing uses lossless scan-line compression, but alpha premultiplication and sample conversion can change source pixels.

Processing

  • Convolution matrices have odd dimensions and no divisor (divide the weights).
  • Edge detection has no non-maximum suppression or thresholds (no Canny detector).
  • Histograms, equalization and auto-levels work on integer pixel formats only.

Drawing and text

  • Drawing is sequential: it does not use several threads.
  • No mesh gradients.
  • Text lines are broken greedily; no word lists are provided for the scripts that need a dictionary to find word boundaries.
  • No AAT (morx, kerx) shaping, no subpixel (LCD) rendering, no ruby in vertical text.
  • Hinting is opt-in and horizontal only.
  • Installed fonts are used only when you ask for them (Font.LoadInstalled, FontStack.WithInstalledFallback).
  • No SVG glyphs, Type 1 fonts or fonts without outlines.