Changelog History
Page 1
-
v1.0.2 Changes
November 13, 2020Advisories and Breaking Changes
- None
π Release Notes
π Bug Fixes
- π Use interest for target bounds. Fixes #1342 - #1343 via @JimBobSquarePants
- π Fixed typo in AdaptiveThreshold - #1362 via @rold2007
- β Add reference output for #1362 - #1363 via @brianpopow
- π Fixed setting the file size when the BMP encoder has a color palette - #1384 via @dlemstra, @JimBobSquarePants
- π Fix ARM Build for UWP Release - #1391 via @JimBobSquarePants
Area:Api
- Auto repair Png options to use Bit8. - #1395 via @JimBobSquarePants
- β Add missing SaveAsync method - #1334 via @JimBobSquarePants
- Image.WrapMemory APIs wrapping Memory - #1314 via @Sergio0694, @JimBobSquarePants
π Area:Performance
- β Add Avx backed Block8x8F Transpose method - #1374 via @JimBobSquarePants
- β‘οΈ Optimize Block8x8F low hanging fruit and fix naming - #1390 via @JimBobSquarePants
- β Add SimdUtils.HwIntrinsics - #1398 via @JimBobSquarePants
- β Add Avx2 Vector4 Span Premultiplication and Reverse - #1399 via @JimBobSquarePants
- β Add AVX2 Vector4Octet.Pack implementation - #1402 via @JimBobSquarePants
- 3 <==> 4 Channel Shuffling with Hardware Intrinsics - #1409 via @JimBobSquarePants
- Vectorize (AVX2) JPEG Color Converter - #1411 via @tkp1n, @antonfirsov, @JimBobSquarePants
- Bokeh blur constructor tweaks (input validation, tiny speedup) - #1332 via @Sergio0694
- π Improved codegen in ImageSharp.Guard - #1333 via @Sergio0694, @JimBobSquarePants
- β Add 4 Channel Shuffle Intrinsics - #1404 via @JimBobSquarePants
- β‘οΈ Optimize TryGetSinglePixelSpan - #1407 via @JimBobSquarePants
- β¬οΈ Bump ChunkedMemoryStream buffer length - #1328 via @JimBobSquarePants
π Area:Build
- π Fix compatibility with NET 5 SDK InternalsVisibleTo - #1337 via @JimBobSquarePants
- π Use Ubuntu for Code Coverage. - #1377 via @JimBobSquarePants
- β‘οΈ Update Dependencies - #1378 via @JimBobSquarePants
- β¬οΈ Upgraded Magick.NET. - #1383 via @dlemstra, @JimBobSquarePants
- π Fix JpegDecoderTests.Decode_IsCancellable - #1415 via @antonfirsov
- β Advanced Feature Testing - #1385 via @JimBobSquarePants
-
v1.0.1 Changes
August 21, 2020Advisories and Breaking Changes
- None
π Release Notes
π Bug
π Simplify jpeg encoder and fix for Windows ARM - #1304 via @JimBobSquarePants
π Fix non-seekable stream reading - #1316 via @JimBobSquarePants
Other
- β Add GitHub Sponsors - #1311 via @JimBobSquarePants
-
v1.0.0 Changes
January 25, 2019π Improvements since beta-5
Resize
- Significant speed-up in our resizer (
~2.5x
). On .NET Core 2.1 now we downscale images faster than System.Drawing (#731, #781) - Using
~30%
less memory during resize (#731, #781) - #719 - Keep one pixel if aspect ratio respecting resize would set a dimension to 0.
Formats
JPEG (& Exif)
- Read Jpeg-s with incorrect App0 markers (#722)
- Decode interleaved progressive jpegs correctly (#724)
- π Support 12 bit jpegs (#784)
- #698 - Allow several invalid data types when reading the exif resolution.
- #699 - Fix EXIF overflow and Jpeg decoding
- #768 - Various Jpeg optimizations
- #801 - #797 throw ImageFormatException when no StartOfFrame marker is found
- #804 - Use bounds checks in Huffman ctr. Fix #798
PNG
- π Preserve PNG trancparency metadata after decoding. (#764, #693)
- π #705 - Png and Wu Quantizer fixes
- #712 - Add 1, 2, and 4 bit Png Encoding
- #740 - Use scaled luminance trns comparison.
BMP
- β #676 - Fix 1 bit bmp decoding and add extra test images.
- π§ #791 - WIP: Adds support for Decoding Bitmaps with 16 bytes headers
- π #792 - WIP: Fix for Windows 2.0 or OS/2 1.x bitmaps only use 3 bytes per color palette entry
- #796 - Decoding Bitmaps with BITFIELDS masks
- π #812 - Support for decoding RLE4 encoded bitmaps
- π #813 - Adds support for OS/2 version 2 bitmaps
GIF
- #770 - Fix infinite loop when a GIF prematurely terminates
Color Spaces and Filters
- Publish Color Space and transformation API-s (#664)
- Introduce
ColorMatrix
and fix Color Filters, making them CSS-compatible (#806) - π¨ #734 - Refactor Companding
- #736 - Write float values using the invariant culture.
Pixel Types
- β Add Gray8 and Gray16 Pixel Formats and clean up IPixel (#729)
- #754 - Imrpoved Gray8 accuracy
- #728 - Add ToString implementations to Bgr24 and Bgra32
- π¨ #744 - Refactor & simplify conversion API's
- β‘οΈ #680 - Optimize Equals & GetHashCode methods within PixelFormats
Drawing and text
- The
.DrawImage()
extension method works across pixel types. (image<Rgba>.Mutate(x => x.DrawImage( Image<Argb>))
) (#686) - β‘οΈ #765 - Optimize filling a region with a solid brush when antialias is off
- #755 - Prevent text wandering from baseline
- #756 - constrain destination span and scanline to same length
Transformations
- Introduce
AffineTransformBuilder
andProjectiveTransformBuilder
to help dealing with composite transformations. (#775) - #788 - Fix Projective Transforms
Compatibility
- π Improved Xamarin iOS compatibility by providing a workaround for AOT issues (#767, #785)
- π Discontinue netstandard1.1 support (#737)
- π Discontinue .NET Core 2.0 support (#681)
- #746 - Cross target NET472 and enable extended intrinsics behind symbol
- #708 - Fix issue on mono <= 5.14 when reading multiple png data chunks.
Other
π New API-s and API changes
- Split pixel blending and alpha composition API-s (#641, #679)
- β Add API-s to preserve format-specific metadata after decoding images, so it won't be lost when they are being reencoded. (#693)
- Image formats are now public (#701)
- π¨ #741 - Add generic palette quantizer, refactor + werner palette
Optimizations
- #671 - Use span directly for DetectFormat
- β‘οΈ #710 - Optimized parallel pixel processing
- β‘οΈ #742 - Clean up and optimize byte<->float and Rgba32 <-> Vector4 conversion
- β‘οΈ #751 - Introduce optimized conversion methods for RGBA-like types
- #771 - Avoid doing the same thing multiple times
π Bug fixes
- π§ #684 - Don't allow duplicate formats in configuration.
- #715 - Use clean buffer when detecting format
- #753 - Added missing length check that caused an ArgumentNullException (#750)
- #726 - Throw when crop rectangle exceeds source bounds.
- Mathematically correct Gaussian Blur (#789)
Internal changes without visible effects
#678, #682, #689, #717, #720, #727, #747, #760, #769, #773, #772, #783, #691, #706, #709, #761, #759, #780, #782
Special thanks to regular contributors
- Jason Nelson (@iamcarbon) - Code sanity, optimizations
- @jongleur1983 - Code sanity, optimizations
- Vicente Penades (@vpenades) - Separating Color Blending from Alpha Composition
- π Brian Popow (@brianpopow) - Better BMP support
- π Dan Manning (@dmanning23) - AOT seeding for Xamarin iOS
- π @devedse - Png metadata
- π Stephan Vedder (@feliwir) - 12 bit Jpeg support
Blog post (including long term licensing plans)
- Significant speed-up in our resizer (
-
v1.0.0-rc.3 Changes
June 18, 2020Area:Api
- Async APIs / Fake Async Codecs - #1196 via @tocsoft, @JimBobSquarePants
π Bug
- Only throw for multi SOF when fully decoding. - #1226 via @JimBobSquarePants
- β‘οΈ Update Adler32 to correctly filter intrinsics. - #1229 via @JimBobSquarePants
- π Use ConcurrentDictionary for options properties. - #1234 via @JimBobSquarePants
π Area:Build
- β¬οΈ Bump Gitversion - #1232 via @JimBobSquarePants
Other
- β‘οΈ Update README.md - #1216 via @shaggygi
- π Use MemoryAllocator in FixedCapacityPooledMemoryStream - #1223 via @antonfirsov
- β Tests for FixedCapacityPooledMemoryStream - #1225 via @antonfirsov
- β Added Third Party Notices document - #1236 via @Turnerj, @JimBobSquarePants
-
v1.0.0-rc.2 Changes
June 08, 2020π Release Notes
Reintroduces the Apache 2.0 License as the open source license.
π Area:Performance
- β Add Hardware Accelerated Checksums - #1201 via @JimBobSquarePants
π Bug
- Return input checksum value on empty buffer - #1203 via @JimBobSquarePants
- Swap buffers when encoding PNG with Filtered Adam7 Palette mode - #1212 via @JimBobSquarePants
- π Change Scanlines and SamplesPerLine from short to int - #1197 via @brianpopow
- Ensure min dimension of 1px following rounding. - #1198 via @JimBobSquarePants
β¨ Enhancement
- β Added: ability to skip unneeded chunks for optimization mode - #1012 via @equinox2k, @brianpopow, @JimBobSquarePants
π Area:Build
- π Use official Codecov action - #1214 via @JimBobSquarePants
Formats:Tga
- β Additionally checks in DetectFormat for TGA files - #1210 via @brianpopow
Other
- Minor readme typo. "commmon" -> "common" - #1200 via @Jaben, @JimBobSquarePants
- β Add Discussions Links - #1213 via @JimBobSquarePants
-
v1.0.0-rc.1 Changes
April 30, 2020π Release Notes
Milestone: 1.0.0-rc1
Area:Api
- ExifTagDescriptionAttribute doesnt need fields - #978 via @SimonCropp, @JimBobSquarePants
- π¨ Refactor IDisposable pattern - #1009 via @JimBobSquarePants
- π¦ Expose visitor through advanced namespace. - #1010 via @JimBobSquarePants
- π¨ Make processors public, refactor cloning. - #1011 via @JimBobSquarePants
- π¦ Expose pixelblenders. #967 - #1028 via @JimBobSquarePants
- π¦ Expose Buffer2D and ParallelHelper internals - #1035 via @antonfirsov, @JimBobSquarePants
- π¦ Expose final internals to allow decoupling Drawing. - #1046 via @JimBobSquarePants
- π Allow returning the image format with the info. - #1059 via @JimBobSquarePants
- β Add La16 and La32 IPixel formats. - #1062 via @JimBobSquarePants
- Public Vector4 to/from conversions - #1050 via @Sergio0694, @JimBobSquarePants
- π Allow passing custom Configuration instances to processors - #1070 via @JimBobSquarePants
- π Simplify and cleanup build constants - #1075 via @JimBobSquarePants
- π Merge SixLabors.Core sources into ImageSharp - #1087 via @antonfirsov, @DaniaalNadir, @dlemstra, @iamcarbon, @JimBobSquarePants, @Mertsch, @synercoder, @tocsoft
- π¦ Expose Pixel Operations and Configuration - #1095 via @JimBobSquarePants
- π Rename Pixel Shader Extensions and Delegates - #1096 via @JimBobSquarePants
- β Add new Color parsing methods. - #1104 via @JimBobSquarePants
- Single row value delegates for parallel iterator - #1108 via @Sergio0694
- β Remove Closure Allocations when Iterating Rows in Parallel - #1107 via @JimBobSquarePants, @Sergio0694
- Bokeh blur cache optimization - #1113 via @Sergio0694
- π Fix quantization and dithering. - #1114 via @JimBobSquarePants, @brianpopow
- Implement discontiguous buffer handling - #1109 via @antonfirsov, @brianpopow, @JimBobSquarePants
- Generic Octet struct - #1131 via @Sergio0694
- π¨ Refactoring and tweaks (2) - #1122 via @Sergio0694, @JimBobSquarePants
- Single row value delegate option - #1132 via @Sergio0694
- Text segment ReadOnlySpan initialization - #1133 via @Sergio0694, @JimBobSquarePants
- π Dither and Quantize API and Performance Improvements. - #1138 via @JimBobSquarePants, @antonfirsov
- β Add overloads. Fix #1144 - #1146 via @JimBobSquarePants
- β Add image extension method for save as tga - #1155 via @brianpopow
- Clean Up Namespaces and Visibility - #1161 via @JimBobSquarePants
- π Improve accessability of Span methods. - #1172 via @JimBobSquarePants
- β‘οΈ Update ToBase64String - #1175 via @JimBobSquarePants
- π Allocation-free IMemoryGroup enumeration - #1173 via @Sergio0694, @JimBobSquarePants
- β Add exception type and update xml docs. - #1179 via @JimBobSquarePants
- β Add Property bag to Configuration and Image Processing Context - #1176 via @tocsoft, @JimBobSquarePants
- π Change ImageFormatException to InvalidImageContentException - #1190 via @brianpopow
- Introduce PngCompressionLevel - #1192 via @JimBobSquarePants
- BufferRegion => Buffer2DRegion - #1194 via @JimBobSquarePants
Area:Bug
- π Fix RGB to HSL conversion - #1001 via @JimBobSquarePants
- π Fix #999 and add tests - #1003 via @JimBobSquarePants
- π Fix #1004 - #1005 via @JimBobSquarePants, @antonfirsov
- Prevent PathGradientBrush from throwing an error with corner cases - #1007 via @mysticfall
- π Fix horizontally out-of-bounds error when drawing text - #1008 via @Turnerj
- π Change histogram clipLimit to be an absolute value - #1017 via @brianpopow, @JimBobSquarePants
- Png decoder fix for Issue #1014 - #1020 via @brianpopow
- β‘οΈ Update the hex value for DarkSeaGreen color - #1021 via @zappyzhao, @JimBobSquarePants
- π Fix reading of pngs with corrupt IEND chunks. - #1055 via @JimBobSquarePants
- π Fix #1006 Resize from large source to small thumbnail produces deformed top pixel rows - #1060 via @JimBobSquarePants
- Js/fix namespace - #1066 via @JimBobSquarePants
- π EXIF - Post review fixes - #1069 via @JimBobSquarePants
- π― Enumerate once on clone. Fix #1073 - #1074 via @JimBobSquarePants
- β Remove invalid Subsampling checks. - #1078 via @JimBobSquarePants
- π Use per-edge buffer + minor optimizations. - #1079 via @JimBobSquarePants
- β‘οΈ Update Exif LensInfo - #1093 via @JimBobSquarePants
- 0οΈβ£ Default Gif RepeatCount to 1 - #1100 via @JimBobSquarePants
- Break when minY >= bottom - #1106 via @JimBobSquarePants, @antonfirsov
- small fix in JpegColorConverter - #1119 via @antonfirsov
- Don't backpeddle when reading chunk lengths. Fix #1127 - #1128 via @JimBobSquarePants
- π Fix edge detection and reenable entropy crop tests - #1145 via @JimBobSquarePants
- π Simple copy & paste error fixed, GetMaxX must return width not height. - #1154 via @samsosa, @JimBobSquarePants
- TGA dont ignore alpha channel bits - #1157 via @brianpopow
- π TGA image origin and support decoding 16bit monochome images - #1160 via @brianpopow
- β Additional tga tests for paletted RLE images - #1165 via @brianpopow
- Always read CRC. - #1178 via @JimBobSquarePants
- β Cast to long and add test/guard. - #1180 via @JimBobSquarePants
- β Add DegenerateTransformException - #1181 via @JimBobSquarePants, @brianpopow
π Area:Build
- β‘οΈ update Microsoft.Net.Compilers.Toolset to 3.3.1 - #1036 via @SimonCropp
- β Remove all the ImageSharp.Drawing project and related tests. - #1082 via @tocsoft, @JimBobSquarePants
- π enable using github actions for build - #1061 via @tocsoft, @JimBobSquarePants
- π Fix build number - #1085 via @JimBobSquarePants
- π Fix coverage - #1094 via @MarcoRossignoli, @JimBobSquarePants
- β‘οΈ Update codecov.yml - #1102 via @JimBobSquarePants
- Strong name all projects in the repository - #1130 via @antonfirsov, @JimBobSquarePants
- π· Try to fix corflags.exe failures on CI - #1134 via @antonfirsov
- β‘οΈ Update submodule and remove build copy. - #1142 via @JimBobSquarePants
- π Fix nuget package icon. - #1186 via @JimBobSquarePants
Area:Codequality
- β remove patternVector in patternBrush - #977 via @SimonCropp, @antonfirsov
- use SUPPORTS_EXTENDED_INTRINSICS to filter out some BasicIntrinsics25. - #981 via @SimonCropp
- π Use stylecop in Test project - #1090 via @brianpopow, @JimBobSquarePants
- π Use Moment struct in WuQuantizer. - #1112 via @JimBobSquarePants
Area:Dithering
- β‘οΈ Optimize Error Diffusion - #1039 via @JimBobSquarePants
π Area:Documentation
- β‘οΈ Update README.md - #1081 via @alexwiese
- π Correct xml docs - #1140 via @slang25
- π Fix typos in FilterExtensions.cs - #1139 via @gregleon, @JimBobSquarePants
Area:Enhancement
- β Add code of conduct - #1018 via @JimBobSquarePants
- image lightness filter - #1000 via @ip75, @antonfirsov, @JimBobSquarePants, @SimonCropp
- β Add support for decoding and encoding of TGA images - #1026 via @brianpopow, @JimBobSquarePants
- π Fix Png Encoder Compression - #1054 via @JimBobSquarePants
- Inline pixel shader processors - #1065 via @Sergio0694, @JimBobSquarePants
- π Allow inferring of some PngEncoderOptions - #1019 via @Sheyne, @JimBobSquarePants
- Gif. Use Buffer2D throughout. - #1158 via @JimBobSquarePants
- β Addition of Breadley AdaptiveThreshold - #725 via @SimantoR, @brianpopow
Area:Formats:Jpeg
- Huffman decode optimizations - #1038 via @JimBobSquarePants
- Undo jpeg perf regression, add various optimizations - #1143 via @antonfirsov
Area:Formats:Gif
- β Addional gif test cases - #1191 via @brianpopow
- Efficient global quantization in GifEncoder - #1193 via @antonfirsov
Area:Formats:Png
- Faster Deflate - #1170 via @JimBobSquarePants
- PNG Identify reads zTXt, iTXt and exif cunks - #1187 via @brianpopow
- Gamma chunk should come before palette chunk - #1188 via @brianpopow
- β Remove obsolete PngTextProperties from png metadata - #1189 via @brianpopow
Area:Formats:Tga
- Speed up tga decoding and add new benchmark comparison - #1072 via @JimBobSquarePants
Area:Memory
- β Harden memory-intensive tests, repurpose Sandbox46 - #1089 via @antonfirsov, @JimBobSquarePants
π Area:Metadata:Exif
- Replace EXIF Profile API - #1067 via @JimBobSquarePants
π Area:Metadata:Iptc
- β Add support for encoding and decoding IPTC metadata - #1174 via @brianpopow, @JimBobSquarePants
π Area:Performance
- small improvements on the PorterDuff functions - #1042 via @jongleur1983, @JimBobSquarePants
- Bokeh blur speedup and memory usage improvement - #1058 via @Sergio0694
- OilPaintingProcessor memory usage improvements - #1068 via @Sergio0694, @brianpopow
- β Removed unnecessary MemoryMarshal.Cast call - #1117 via @Sergio0694
- Faster Transforms - #1118 via @JimBobSquarePants
- Replace Vector4.Clamp - #1152 via @JimBobSquarePants, @brianpopow
- More Efficient ToBase64String - #1153 via @JimBobSquarePants
Other
- π Make MS Compilers Toolset private - #1171 via @JimBobSquarePants
β Unit Tests
- β Add unit test for #1154: entropy crop on white image should not crop - #1156 via @brianpopow
- β Additional tests - #1184 via @brianpopow
-
v1.0.0-beta7 Changes
September 04, 2019- π
#816 - Update dependencies + fix stylecop
enhancement
contributed by JimBobSquarePants - #819 - Respecting fileHeader Offset, skipping bytes if necessary
bug
formats:bmp
contributed by brianpopow - #820 - Track input stream position on load.
bug
formats:jpeg
contributed by JimBobSquarePants - #830 - Fix Decoding 8-Bit interlaced grayscale png's with alpha channel contributed by brianpopow
- #831 - Fix Decoding interlaced grayscale png's contributed by brianpopow
- π #832 - Add support for Decoding BI_ALPHABITFIELDS contributed by brianpopow
- π #833 - Allow Build with Visual Studio For Mac
build
contributed by JimBobSquarePants - π #834 - Remove hardcoded subsampling.
bug
formats:jpeg
contributed by JimBobSquarePants - β #835 - GDI+ stability fixes for the benchmark and tests contributed by Lakritzator
- π #836 - Jpeg Fuzz Fixes
bug
formats:jpeg
contributed by JimBobSquarePants - #841 - Lazily derive the huffman tables. Fix #839
bug
formats:jpeg
contributed by JimBobSquarePants - #842 - Bokeh blur implementation contributed by Sergio0694
- #848 - Implement IEquatable<Block8x8F> and check when summing.
bug
formats:jpeg
contributed by JimBobSquarePants - #851 - Png Decoder Bounds check. Fix #849
bug
formats:png
contributed by JimBobSquarePants - π #853 - #852 Adding instructions to add submodules when cloning the repository
documentation
contributed by bulldetektor - π #855 - Updating some readonly static data in JpegEncoderCore to take advantage of compiler functionality.
formats:jpeg
performance
contributed by tannergooding - π #863 - Remove Enum Comparison Boxing
performance
contributed by JimBobSquarePants - #864 - Fix incorrect gradient color-stop calculation
bug
drawing
contributed by Poyo-SSB - #865 - Change existing gradient brushes to accept PointF
drawing
enhancement
contributed by Poyo-SSB - π #869 - Introduce extended pixel conversion
api
enhancement
performance
contributed by antonfirsov - #870 - Nits
codequality
contributed by iamcarbon - #874 - Use more accuracy when calculating variance. Fix #866
bug
quantizers
contributed by JimBobSquarePants - π #877 - Now throws a better excpetion DrawImage source does not overlap target contributed by atruskie
- π #879 - Nits - Metadata
documentation
metadata:exif
metadata:icc
metadata:iptc
metadata:xmp
contributed by iamcarbon - π #880 - Nits - Colorspaces
bug
colorspaces
performance
contributed by iamcarbon - #883 - ImageBrush shouldn't Dispose of the image it is using.
bug
drawing
contributed by BorisTheBrave - #884 - Nits - Benchmarks
codequality
contributed by iamcarbon - π #885 - Handle incorrect colorspace metadata.
bug
formats:jpeg
contributed by JimBobSquarePants - π #887 - Cleanup General Convolution
api
bug
performance
contributed by JimBobSquarePants - π #888 - Limit ResizeProcessor memory consumption
enhancement
memory
performance
contributed by antonfirsov - 0οΈβ£ #889 - Bitmap encoder writes V3 header as default
bug
formats:bmp
contributed by brianpopow - π #891 - Fix travis builds
build
contributed by antonfirsov - #893 - Pass correct output size source image is smaller than the Target in ResizeMode.Min
bug
contributed by dannsam - π #894 - Faster Jpeg Huffman Decoding.
formats:jpeg
performance
contributed by JimBobSquarePants - π #899 - Add support for encoding 16 bit per pixel bitmaps
enhancement
formats:bmp
contributed by brianpopow - β
#902 - Validating tests for Image Processors
unit tests
contributed by antonfirsov - β
#903 - Add additional pixel conversion tests
formats:bmp
unit tests
contributed by brianpopow - #904 - Introduce a non-generic Image base class
api
enhancement
contributed by antonfirsov - π #905 - Update Readme
documentation
contributed by SLane35 - π #906 - Adds support for encoding 8-bit bitmaps
enhancement
formats:bmp
contributed by brianpopow - #908 - Introduce representation-agnostic Color type
api
enhancement
contributed by antonfirsov - #909 - Not using quantization for Grey8 images when encoding 8Bit Bitmaps
formats:bmp
contributed by brianpopow - #910 - Pixel-agnostic Drawing processors and extensions
api
enhancement
contributed by antonfirsov - #911 - API cleanup (related to #907) contributed by antonfirsov
- #915 - Fix for Issue #871 and #914 contributed by brianpopow
- #916 - Add Color overload to Pad method.
enhancement
contributed by JimBobSquarePants - #917 - Added funding file with a link to open collective. contributed by dlemstra
- π #918 - Removes usage of linq in several critical paths
performance
contributed by JimBobSquarePants - β‘οΈ #920 - Updating the repo to use Directory.Build.props/targets files contributed by tannergooding
- #921 - Fix missing "using PixelFormats" line in Readme example contributed by tonygameplan
- π #923 - Fix local build/tests
build
contributed by JimBobSquarePants - #924 - Prevent zigzag overflow. Fix #922
bug
formats:jpeg
contributed by JimBobSquarePants - #927 - Feature: Bitmap RLE undefined pixel handling
formats:bmp
contributed by brianpopow - #929 - Fix 925
bug
formats:jpeg
contributed by JimBobSquarePants - #930 - Bitmap decoder now can decode bitmap arrays
enhancement
formats:bmp
contributed by brianpopow - #932 - Throw UnkownFormatException on Image.Load contributed by fredeil
- #938 - Fix #937 contributed by JimBobSquarePants
- π #939 - Add support for decoding RLE24 Bitmaps
enhancement
formats:bmp
contributed by brianpopow - #941 - Introduce non-generic ImageFrameCollection contributed by antonfirsov
- π #949 - #946: AoT compiler fixes and cleaned up AoTCompilerTools contributed by dmanning23
- π #951 - Add support for read and write tEXt, iTXt and zTXt chunks
enhancement
formats:png
contributed by brianpopow - #952 - Master cleanup
chore
contributed by JimBobSquarePants - π #955 - #244 Add support for interlaced PNG encoding
enhancement
formats:png
contributed by IldarKhayrutdinov - π #957 - fix some spelling
documentation
contributed by SimonCropp - π #958 - remove duplicate props from csproj contributed by SimonCropp
- #959 - fix "as" usage
bug
contributed by SimonCropp - #960 - redundant usings
codequality
contributed by SimonCropp - #961 - use params where possible
codequality
contributed by SimonCropp - π #962 - fix some spelling
documentation
contributed by SimonCropp - π #963 - remove unused variables and methods
codequality
performance
contributed by SimonCropp - #964 - Fix IndexOutOfRangeException in FillRegionProcessor contributed by 101100
- #965 - Cleanup
codequality
contributed by SimonCropp - #968 - Throw ObjectDisposedException when trying to operate on a disposed image contributed by antonfirsov
- π #971 - remove some redundant variables and type params contributed by SimonCropp
- #972 - use var where apparent contributed by SimonCropp
- #973 - redundant comment contributed by SimonCropp
- π #974 - remove redundant ParallelOptions
codequality
contributed by SimonCropp - π #975 - aviod multiple array lookup
performance
contributed by SimonCropp - π #976 - remove some redundant usings contributed by SimonCropp
- π #979 - remove some redundant constructor overloads from exceptions contributed by SimonCropp
- π #980 - remove SteppedRange contributed by SimonCropp
- #982 - cache max in ConvertToRgba contributed by SimonCropp
- π¨ #983 - Processors refactoring contributed by Sergio0694
- #984 - Fix adaptive histogram out of bounds bug contributed by brianpopow
- π #986 - #12 Synch with master and improve performance of decoders contributed by IldarKhayrutdinov
- #989 - Implement gradient brush similar to PathGradientBrush (#969)
drawing
enhancement
contributed by mysticfall - #990 - Implement IDisposable in IImageProcessor<TPixel> instances.
api
contributed by JimBobSquarePants - βͺ #991 - Patch MemoryOwnerExtensions to workaround #987 contributed by antonfirsov
- π #992 - Fixed XML docs for RgbaVector pixel type contributed by Sergio0694
- π #993 - Beta7
build
contributed by JimBobSquarePants
- π
#816 - Update dependencies + fix stylecop
-
v1.0.0-beta6 Changes
January 25, 2019π Improvements since beta-5
Resize
- Significant speed-up in our resizer (
~2.5x
). On .NET Core 2.1 now we downscale images faster than System.Drawing (#731, #781) - Using
~30%
less memory during resize (#731, #781) - #719 - Keep one pixel if aspect ratio respecting resize would set a dimension to 0.
Formats
JPEG (& Exif)
- Read Jpeg-s with incorrect App0 markers (#722)
- Decode interleaved progressive jpegs correctly (#724)
- π Support 12 bit jpegs (#784)
- #698 - Allow several invalid data types when reading the exif resolution.
- #699 - Fix EXIF overflow and Jpeg decoding
- #768 - Various Jpeg optimizations
- #801 - #797 throw ImageFormatException when no StartOfFrame marker is found
- #804 - Use bounds checks in Huffman ctr. Fix #798
PNG
- π Preserve PNG trancparency metadata after decoding. (#764, #693)
- π #705 - Png and Wu Quantizer fixes
- #712 - Add 1, 2, and 4 bit Png Encoding
- #740 - Use scaled luminance trns comparison.
BMP
- β #676 - Fix 1 bit bmp decoding and add extra test images.
- π§ #791 - WIP: Adds support for Decoding Bitmaps with 16 bytes headers
- π #792 - WIP: Fix for Windows 2.0 or OS/2 1.x bitmaps only use 3 bytes per color palette entry
- #796 - Decoding Bitmaps with BITFIELDS masks
- π #812 - Support for decoding RLE4 encoded bitmaps
- π #813 - Adds support for OS/2 version 2 bitmaps
GIF
- #770 - Fix infinite loop when a GIF prematurely terminates
Color Spaces and Filters
- Publish Color Space and transformation API-s (#664)
- Introduce
ColorMatrix
and fix Color Filters, making them CSS-compatible (#806) - π¨ #734 - Refactor Companding
- #736 - Write float values using the invariant culture.
Pixel Types
- β Add Gray8 and Gray16 Pixel Formats and clean up IPixel (#729)
- #754 - Imrpoved Gray8 accuracy
- #728 - Add ToString implementations to Bgr24 and Bgra32
- π¨ #744 - Refactor & simplify conversion API's
- β‘οΈ #680 - Optimize Equals & GetHashCode methods within PixelFormats
Drawing and text
- The
.DrawImage()
extension method works across pixel types. (image<Rgba>.Mutate(x => x.DrawImage( Image<Argb>))
) (#686) - β‘οΈ #765 - Optimize filling a region with a solid brush when antialias is off
- #755 - Prevent text wandering from baseline
- #756 - constrain destination span and scanline to same length
Transformations
- Introduce
AffineTransformBuilder
andProjectiveTransformBuilder
to help dealing with composite transformations. (#775) - #788 - Fix Projective Transforms
Compatibility
- π Improved Xamarin iOS compatibility by providing a workaround for AOT issues (#767, #785)
- π Discontinue netstandard1.1 support (#737)
- π Discontinue .NET Core 2.0 support (#681)
- #746 - Cross target NET472 and enable extended intrinsics behind symbol
- #708 - Fix issue on mono <= 5.14 when reading multiple png data chunks.
Other
π New API-s and API changes
- Split pixel blending and alpha composition API-s (#641, #679)
- β Add API-s to preserve format-specific metadata after decoding images, so it won't be lost when they are being reencoded. (#693)
- Image formats are now public (#701)
- π¨ #741 - Add generic palette quantizer, refactor + werner palette
Optimizations
- #671 - Use span directly for DetectFormat
- β‘οΈ #710 - Optimized parallel pixel processing
- β‘οΈ #742 - Clean up and optimize byte<->float and Rgba32 <-> Vector4 conversion
- β‘οΈ #751 - Introduce optimized conversion methods for RGBA-like types
- #771 - Avoid doing the same thing multiple times
π Bug fixes
- π§ #684 - Don't allow duplicate formats in configuration.
- #715 - Use clean buffer when detecting format
- #753 - Added missing length check that caused an ArgumentNullException (#750)
- #726 - Throw when crop rectangle exceeds source bounds.
- Mathematically correct Gaussian Blur (#789)
Internal changes without visible effects
#678, #682, #689, #717, #720, #727, #747, #760, #769, #773, #772, #783, #691, #706, #709, #761, #759, #780, #782
Special thanks to regular contributors
- Jason Nelson (@iamcarbon) - Code sanity, optimizations
- @jongleur1983 - Code sanity, optimizations
- Vicente Penades (@vpenades) - Separating Color Blending from Alpha Composition
- π Brian Popow (@brianpopow) - Better BMP support
- π Dan Manning (@dmanning23) - AOT seeding for Xamarin iOS
- π @devedse - Png metadata
- π Stephan Vedder (@feliwir) - 12 bit Jpeg support
Blog post (including long term licensing plans)
- Significant speed-up in our resizer (
-
v1.0.0-beta5 Changes
August 05, 2018π₯ Breaking changes
π All processing extension methods have been moved to the
SixLabors.ImageSharp.Processing
namespace to improve API discoverability for vanilla VS and VS Code users. (#645) Sub namespaces likeSixLabors.ImageSharp.Processing.Transforms
do no longer exist! You have to remove these using statements from your code:using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;using SixLabors.ImageSharp.Processing; // The only namespace required for processing extensions!uΜΆsΜΆiΜΆnΜΆgΜΆ ΜΆSΜΆiΜΆxΜΆLΜΆaΜΆbΜΆoΜΆrΜΆsΜΆ.ΜΆIΜΆmΜΆaΜΆgΜΆeΜΆSΜΆhΜΆaΜΆrΜΆpΜΆ.ΜΆPΜΆrΜΆoΜΆcΜΆeΜΆsΜΆsΜΆiΜΆnΜΆgΜΆ.ΜΆTΜΆrΜΆaΜΆnΜΆsΜΆfΜΆoΜΆrΜΆmΜΆsΜΆ;ΜΆ // COMPILATION ERROR!
π
image.SavePixelData()
APIs have been removed in favour ofimage.GetPixelSpan()
(#628)π§
Configuration.ParallelOptions
has been replaced withConfiguration.MaxDegreeOfParallelism
(#667)
π Improvements since beta 4:
- π Fixed all remaining issues with .NET Core 2.1
- Jpeg improvements:
- π Introduce
PixelResolutionUnit
inImageMetaData
, fix #490 (#649) - PNG improvements
- β‘οΈ Optimized font rendering by caching glyphs (#614)
- π Improved Gif and Quantization performance when using diffusion by
~600%
(#637) - Cross target .NET Core 2.1 (#604)
- Histogram Equalization (#644)
- Deeper
System.Memory
API integration:- Span overloads for
Image.Load()
andImage.DetectFormat()
(#618) image.GetPixelSpan()
andimage.GetPixelRowSpan()
extension methods for fast pixel data manipulation (#607)Image.WrapMemory(...)
for native interop use-cases (#660)- The
MemoryAllocator
API is now public and shared across all SixLabors projects (#665)
- Span overloads for
NuGet
π¦ https://www.nuget.org/packages/SixLabors.ImageSharp/1.0.0-beta0005
π¦ https://www.nuget.org/packages/SixLabors.ImageSharp.Drawing/1.0.0-beta0005 -
v1.0.0-beta4 Changes
May 31, 2018π Improvements since beta 3
- π Full support for .NET Core 2.1
- π Fixed a bug related to drawing large and complex shapes (eg. pages of text)
- Gradient brushes
- Projective non-affine transforms (tilt, perspective)
- π Improved the robustness of our Jpeg decoder:
- A large part of the implementation has been replaced, allowing to parse a wider range of incorrectly encoded images
- Better ICC reader
- Basic
System.Memory
API integration: Image.LoadPixelData() and SavePixelData() are now able to consume spans - Improved
.Fill(color)
performance and added a constructor initializing images with a default fill color
Blog post