- Add a slice & assert to JxlHuffmanDecoder alphabetSize to allocate at most 256 items
- Use [0, 0] instead of stackalloc[2] followed by Clear() in JxlAnsReader
- Add assert to Butteraugli ComputeKernel method & use float for Butteraugli Wmul & use InlineArray
- Add transpose.
- Note: transpose is scalar, it doesn't support SIMD yet
- Add shared constants & file signature
- Improve while loop in JxlImageOperations.Mirror
- Floating-point Discrete Cosine Transform (1D and 2D)
- Add an inline array of 2 items
Source files implemented from libjxl with this commit:
- dct-inl.h
- dct_block-inl.h
- transpose-inl.h
- Add decoding of Huffman Codes (see dec_huffman.cc and dec_huffman.h)
- Add constructors to JxlImage3* classes
- Make JxlColorCorrelationMap.Create 'xyb' parameter use true as a default value
- Prototype of DCT quant weight parameters
- Add passes shared state (see passes_state.cc and passes_state.h)
- Add prototype for image operations (see image_ops.cc and image_ops.h)
- Simplify inverse MTF (Move to Front) transform
- Add patch context (see patch_dictionary_internal.h)
- Add prototype of quantizer weights
- Add 2nd prototype of ANS entropy decoding (see dec_ans.cc and dec_ans.h)
- Add prototype of patch dictionary decoding (see dec_patch_dictionary.cc and dec_patch_dictionary.h)
The allocation limits on MemoryAllocator were internal with no public
way to raise the 1 GB single-buffer default, and ApplyOptions was not
callable from external subclasses, which blocked custom allocators.
- Expose MemoryGroupAllocationLimitBytes, SingleBufferAllocationLimitBytes,
and AccumulativeAllocationLimitBytes with validated protected setters.
- Make ApplyOptions protected so derived allocators can accept options.
- Add MemoryAllocatorOptions.SingleBufferAllocationLimitMegabytes to raise
the contiguous buffer cap up to 2047 MB without a custom allocator.
- Add public-api tests that implement a complete external allocator.
- Add behavior tests for the new option and its validation.
The binary PGM and PPM formats store 16-bit samples most significant
byte first. The decoder and encoder read and wrote them in native
little-endian order, so every wide sample was byte swapped. This
corrects the swizzled colors reported for 16-bit PPM images.
- Reverse the sample byte order in BinaryDecoder and BinaryEncoder.
- Fix integer division in the max pixel value upscale factor.
- Add exact-value, reference-decoder, upscale, and round-trip tests.
- Add a 16-bit PPM test image and its Magick-anchored reference PNG.
- Document the binary decoder and encoder in full.
Introduce the `Plus` alpha composition mode and add support for ColorDodge, ColorBurn, SoftLight, Difference, Exclusion, Hue, Saturation, Color, and Luminosity across straight-alpha and associated-alpha pixel blenders. The generated blender/function tables and selector logic were updated to expose the new combinations, and tests were expanded to cover mode mapping, expected blend results, and parity between straight and premultiplied alpha paths.
Drops the `AntialiasThreshold` field/property from `GraphicsOptions` and updates related XML docs to reflect the simplified antialiasing behavior. Clone logic and test coverage were adjusted accordingly, including removal of threshold assertions and comparer checks.
Route BlendWithCoverage calls through AssociatedAlphaPorterDuffFunctions when TOperator.IsAssociatedAlpha is true, across all SIMD widths (scalar, Vector256, Vector512) and all BlendWithCoverageFunction overloads.
Tightened icon frame bounds validation to treat `ImageOffset == available` as invalid, preventing non-empty resources from starting at the exclusive end of the icon stream. Added a regression test that mutates an ICO directory entry to this boundary value and verifies both `Decode` and `Identify` throw `InvalidImageContentException` with the expected message.