v2.0.0
Advisories and Breaking Changes
Major breaking changes
- Due to the new unmanaged memory engine, we had to redesign our pixel processing and low level memory management API-s. The most visible change is that the
GetPixelRowSpan()
methods have been replaced withProcessPixelRows()
variants. This was done to guarantee memory safety. For more details see:- 2.0 documentation on Working with Pixel Buffers
- 2.0 documentation on Memory Management
- Pixel processing breaking changes & API discussion - #1739
- Png and Jpeg now decode to pixels formats closer to the encoded format when using the non-generic API. (For example Jpeg now decodes to
Image<Rgb24>
instead ofImage<Rgba32>
.) This was done to reduce memory usage and remove some surprises for users. - We've dropped the old NetStandard 1.3 target. This targeted frameworks not supported by Microsoft and was adding overhead to development.
Complete list of breaking PR-s
- Add Abgr32 pixel type, extend IPixel - #1886 via @ynse01, @antonfirsov, @JimBobSquarePants
- Remove netstandard 1.3 target - #1888 via @JimBobSquarePants
- ImageFormatDetector Configuration Cleanup - #1936 via @JimBobSquarePants
- Unmanaged pooling MemoryAllocator - #1730 via @antonfirsov
- Png - Preserve Pixel Format for Non-generic decode. - #1861 via @JimBobSquarePants
- Decode Jpeg into Rgb24 when pixel type not specified. - #1773
Release Notes
API
- Remove HistogramEqualizationOptions.Default - #1840 via @antonfirsov
- Added missing CancellationToken parameters to Image - #1856 via @justinbhopper
- Expose ImageFrame.PixelBuffer - #1906 via @JimBobSquarePants
- Change the constructor of PixelTypeInfo and ImageMetadata from internal to public so that a user can implement IImageInfo - #1929 via @jz5, @antonfirsov, @JimBobSquarePants
Area:Build
- Update codcov and config - #1820 via @JimBobSquarePants
- Use a scheduled job for codecov - #1934 via @JimBobSquarePants
Area:Formats
- Add support for Portable Bitmap images - #1851 via @ynse01, @antonfirsov, @brianpopow, @JimBobSquarePants
Area:Performance
- Webp: Use byte arrays instead of Dictionary's for lookups - #1800 via @brianpopow
- Add sse2 version of select - #1804 via @brianpopow
- Add SSE2 versions of ClampedAddSubtractFull and ClampedAddSubtractHalf - #1805 via @brianpopow, @JimBobSquarePants
- SSE41 version of Hadamard transform - #1810 via @brianpopow
- Add SSE41 version of Quantize block - #1811 via @brianpopow
- Add SSE2 version of Mean16x4 - #1814 via @brianpopow
- Add SSE2 version of Vp8Sse4X4 - #1817 via @brianpopow
- Hoist some of the calculations from loops of 3DMoments() - #1818 via @kunalspathak, @brianpopow
- Add sse2 version of inverse transform - #1819 via @brianpopow, @JimBobSquarePants
- Add AVX version of CollectColorBlueTransforms and CollectColorRedTransforms - #1824 via @brianpopow, @JimBobSquarePants
- Add AVX version of TransformColor and TransformColorInverse - #1830 via @brianpopow, @JimBobSquarePants
- Webp improvements - #1846 via @brianpopow
- Jpeg new IDCT & fused zigzag/transpose steps - #1847 via @br3aker, @JimBobSquarePants
- Add AVX2 version of AddVector - #1849 via @brianpopow
- Add SSE41 version of UpSample - #1836 via @brianpopow, @JimBobSquarePants
- Add AVX2 versions of CombinedShannonEntropy - #1848 via @brianpopow
- Add SSE2 version of FTransform - #1852 via @brianpopow, @JimBobSquarePants
- Add AVX2 version of Vp8_Sse4X4 - #1860 via @brianpopow
- Jpeg codebase cleanup - #1853 via @br3aker
- Add AVX2 version of QuantizeBlock - #1857 via @brianpopow, @JimBobSquarePants
- Add SSE2 version of TransformOne and TransformTwo - #1862 via @brianpopow, @JimBobSquarePants
- Add SSE2 version for webp Filter methods - #1871 via @brianpopow, @JimBobSquarePants
- Add AVX2 version of CollectHistogram - #1882 via @brianpopow
- Add SSE2 and AVX2 versions of Vp8_Sse16X16 and Vp8_Sse16X8 - #1881 via @brianpopow, @JimBobSquarePants
- Add AVX2 version of GetResidualCost and SSE2 version of SetCoeffs - #1902 via @brianpopow
- SSE2 / AVX2 of webp AlphaDecoding - #1930 via @brianpopow, @JimBobSquarePants
- Jpeg encoder optimization via removing second transpose call from FDCT - #1958 via @br3aker
Bug
- Fix gaussian blurring changing the blur colour when transperancy is used - #1834 via @Turnerj
- Make ColorDistanceCache non-readonly - #1841 via @antonfirsov, @JimBobSquarePants
- Use Rgb24 for Async Jpeg Decode - #1859 via @JimBobSquarePants
- Fix Color conversion for differing types - #1865 via @JimBobSquarePants
- Allocate clean buffer in AnalyzeEntropy - #1873 via @brianpopow
- Fixed jpeg encoder last bytes flushing bug - #1876 via @br3aker
- Tiff: Add maximum IFD threshold - #1892 via @brianpopow
- Fixed Jpeg IDCT missing scalar implementation - #1922 via @br3aker
- Don't throw when Position is out of range. - #1907 via @JimBobSquarePants
- Jpeg ArgumentException fix - #1924 via @br3aker
- EXIF IDF pointer - #1923 via @IldarKhayrutdinov
- Fix for Jpeg Metadata Decoding with unknown APP13 profile - #1931 via @mkehoe, @JimBobSquarePants
- Only attempt to decode the first JFIF marker instance - #1933 via @JimBobSquarePants
- Fix for issue #1942 - #1944 via @brianpopow
- Ensure ResizeProcessor working buffer is contiguous - #1947 via @antonfirsov
- Correctly handle identity transforms with varying dimensions - #1945 via @JimBobSquarePants
- [EXIF] Support UCS2 and 8-byte encoded string tags - #1935 via @IldarKhayrutdinov, @JimBobSquarePants
- Fixed decoding grayscale jpegs with exotic sampling factors - #1979 via @br3aker, @JimBobSquarePants
- Fixed decoding grayscale jpegs with exotic sampling factors - #1979 via @br3aker, @JimBobSquarePants
Codequality
- Collapse AsSpan().Slice(..) calls into AsSpan(..) - #1815 via @turbedi, @brianpopow
Enhancement
- Support High Precision TPixel formats via Color - Boxed - #1801 via @JimBobSquarePants
- Convert OrientationMode into something usable. - #1976 via @JimBobSquarePants, @dlemstra
Formats:Jpeg
- Automatic SSE color converters based on Vector API - #1864 via @br3aker, @brianpopow, @JimBobSquarePants
Formats:Png
- PNG: Verify CRC of IDAT chunk is correct - #1898 via @brianpopow
- Added support for loading exif data from PNG "Raw profile type exif" text chunk - #1877 via @jubilant-enigma, @JimBobSquarePants
Formats:Webp
- Use Span in GetHTreeGroupForPos to avoid allocations - #1793 via @brianpopow
- Write exif profile with padding if needed - #1798 via @brianpopow
- Use helper methods to access clip tables - #1803 via @brianpopow
- Webp encoding: Reduce allocations. - #1799 via @brianpopow
- Make sure magick.net and imagesharp use the same configuration for webp encoding - #1808 via @brianpopow, @JimBobSquarePants
- Webp encoder now defaults to lossy, if nothing else is specified - #1961 via @brianpopow
- Add support for encoding lossy webp images with alpha channels - #1971 via @brianpopow
Other
- Add "decode to target size" skia variant to benchkarks - #1789 via @antonfirsov
- Support executing benchmarks on arm64 - #1794 via @kunalspathak, @JimBobSquarePants
- stackalloc header buffer in InternalDetectFormat - #1812 via @antonfirsov
- Some minor optimizations - #1828 via @turbedi
- Delete outdated benchmark.sh - #1833 via @antonfirsov
- Unified jpeg benchmark - #1844 via @br3aker
- Jpeg decoder mcu size fix - #1845 via @br3aker
- Remove QA from config [skip ci] - #1893 via @JimBobSquarePants
- Jpeg sampling factor validation #1894 - #1899 via @br3aker, @JimBobSquarePants
- Speed up DangerousGetRowSpan(y) - #1901 via @antonfirsov
- Remove return value documentation for void return types. - #1915 via @wischi-chr
- Jpeg HuffmanTable improvements - #1926 via @br3aker, @JimBobSquarePants
- Support for XMP metadata - #1918 via @ynse01, @JimBobSquarePants
- Add basic memory diagnostic API - #1969 via @antonfirsov, @JimBobSquarePants
- Add tiff and webp to the PackageTags - #1977 via @brianpopow, @dlemstra
Unit Tests
- Skip tests on none Sse2/Avx hardware - #1785 via @brianpopow
- Use Convert.To after rounding in Pack() to avoid different behavior on ARM vs x86/x64 - #1790 via @brianpopow
- Remove RunSerial from tests - #1885 via @brianpopow, @JimBobSquarePants
- Move RentReturnRelease_SubsequentRentReturnsDifferentHandles out of process - #1960 via @antonfirsov
- Disable RentReturnRelease_SubsequentRentReturnsDifferentHandles on Mac again - #1970 via @antonfirsov
- Fixed IDisposable leaks in jpeg decoder test suite. - #1974 via @br3aker
New Contributors
- @UltraNamahage made their first contribution in #1574
- @ynse01 made their first contribution in #1586
- @saucecontrol made their first contribution in #1601
- @TechnologicalPizza made their first contribution in #1630
- @br3aker made their first contribution in #1629
- @tompazourek made their first contribution in #1691
- @stephentoub made their first contribution in #1707
- @synercoder made their first contribution in #1766
- @kunalspathak made their first contribution in #1794
- @turbedi made their first contribution in #1815
- @justinbhopper made their first contribution in #1856
- @wischi-chr made their first contribution in #1915
- @jubilant-enigma made their first contribution in #1877
- @mkehoe made their first contribution in #1931
- @jz5 made their first contribution in #1929
Full Changelog: v1.0.4...v2.0.0