Use tile width (instead of full image width) when creating T4/T6/Modified Huffman decompressors for tiled TIFF decoding, preventing row-size mismatches and false overrun failures. Also standardize the CCITT overrun error message and add regression coverage for both strip-based and tiled reporter samples that must throw when decoded pixels exceed image width.
The README linked to github.com/SixLabors/Samples/tree/main/ImageSharp, which returns GET 404. The samples now live in SixLabors.Samples.ImageSharp on the same repo.
Co-authored-by: FirmamentalSpring <287222957+FirmaSpring@users.noreply.github.com>
Adds explicit bounds checks before writing decoded CCITT runs in both T4 and Modified Huffman TIFF decompressors, preventing oversized runs from writing past the current row. Error messages were also standardized/capitalized for CCITT parsing failures. Includes new regression tests using compressed TIFF PoCs to verify decoding now throws ImageFormatException with the expected width-overrun message.
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.
- Add ICO, CUR, and QOI encoder/decoder seeding in AotCompilerTools
- Introduce SeedPixelOperations() to explicitly seed all built-in pixel format PixelOperations<T> specializations for Mono WASM AOT
- Add [DynamicDependency] on Configuration constructors to keep the seed graph visible to .NET trimmers
- Add AI coding guideline files (AGENTS.md, CLAUDE.md, GEMINI.md, copilot-instructions.md)
- Update .gitattributes to treat .a, .dylib, and .so as binary