* Add support for writing tEXt chunks
* Add support for reading zTXt chunks
* Add check, if keyword is valid
* Add support for reading iTXt chunks
* Add support for writing iTXt chunks
* Remove Test Decode_TextEncodingSetToUnicode_TextIsReadWithCorrectEncoding: Assertion is wrong, the correct keyword name is "Software"
* Add support for writing zTXt chunk
* Add an encoder Option to enable compression when the string is larger than a given threshold
* Moved uncompressing text into separate method
* Remove textEncoding option from png decoder options: the encoding is determined by the specification: https://www.w3.org/TR/PNG/#11zTXt
* Removed invalid compressed zTXt chunk from test image
* Revert accidentally committed changes to Sandbox Program.cs
* Review adjustments
* Using 1024 bytes as a limit when to compress text as recommended by the spec
* Fix inconsistent line endings
* Trim leading and trailing whitespace on png keywords
* Move some metadata related tests into GifMetaDataTests.cs
* Add test case for gif with large text
* Gif text metadata is now a list of strings
* Encoder writes each comment as a separate block
* Adjustment of the Tests to the recent changes
* Move comments to GifMetadata
* Move Png TextData to format PngMetaData
* Added base BokehBlurProcessor class, and kernel parameters
* Added method to calculate the kernel parameters
* Switched to float, added method to create the 1D kernels
* Added complex kernels normalization
* Added BokehBlurExtensions class
* Added the Complex64 struct type
* Switched to Complex64 in the BokehBlurProcessor
* Added caching system for the bokeh processor parameters
* Added WeightedSum method to the Complex64 type
* Added IEquatable<T> interface to the Complex64 type
* New complex types added
* Added method to reshape a DenseMatrix<T> with no copies
* Added bokeh convolution first pass (WIP)
* Added second bokeh convolution pass (WIP)
* Added image sum pass to the bokeh processor (WIP)
* Minor bug fixes (WIP)
* Switched to Vector4 processing in the bokeh computation
* Minor tweaks
* Added Unit test for the bokeh kernel components
* Minor performance improvements
* Minor code refactoring, added gamma parameter (WIP)
* Removed unused temp buffers in the bokeh processing
* Gamma highlight processing implemented
* Speed optimizations, fixed partials computations in target rectangle
* Increased epsilon value in the unit tests
* Fixed for alpha transparency blur
* Fixed a bug when only blurring a target rectangle
* Added bokeh blur image tests (WIP)
* Added IXunitSerializable interface to the test info class
* culture independent parsing in BokehBlurTest.cs
* Performance optimizations in the bokeh processor
* Reduced number of memory allocations, fixed bug with multiple components
* Initialization and other speed improvements
* More initialization speed improvements
* Replaced LINQ with manual loop
* Added BokehBlur overload to just specify the target bounds
* Speed optimizations to the bokeh 1D convolutions
* More speed optimizations to the bokeh processor
* Fixed code style and Complex64.ToString method
* Fixed processing buffer initialization
* Minor performance improvements
* FIxed issue when applying bokeh blur to specific bounds
* Minor speed optimizaations
* Minor code refactoring
* Fixed convolution upper bound in second 1D pass
* improve BokehBlurTest coverage
* use Gray8 instead of Alpha8
* Adjusted guard position in bokeh processor constructor
* Added BokehBlurParameters struct
* Added BokehBlurKernelData struct
* Minor code refactoring
* Fixed API change build errors
* Bug fixes with the pixel premultiplication steps
* Removed unwanted unpremultiplication pass
* Removed unused using directives
* Fixed missing using directives in conditional branches
* Update from latest upstream master
* Update Block8x8F.Generated.cs
* Update GenericBlock8x8.Generated.cs
* Manual checking for files with LF (see gitter)
* Removed unused using directive
* Added IEquatable<ComplexVector4> interface
* Added IEquatable<BokehBlurParameters> interface
* Moved bokeh blur parameters types
* Added reference to original source code
* Complex convolution methods moved to another class
* Switched to MathF in the bokeh blur processor
* Switched to Vector4.Clamp
* Added Buffer2D<T>.Slice API
* Added BokehBlurExecutionMode enum
* Added new bokeh blur processor constructors
* Added new bokeh blur extension overloads with execution mode
* Code refactoring in preparation for the execution mode switch
* Implemented execution mode switch in the bokeh processor
* Moved BokehBlurExecutionMode struct
* Removed unused using directives
* Minor code refactoring
* More minor code refactoring
* Update External
* Fix undisposed buffers
* Bokeh blur processor cache switched to concurrent dictionary
* Minor code refactoring
* Add support for decoding RLE24
* Simplified determining colorMapSize, OS/2 always has 3 bytes for each palette entry
* Enum value for RLE24 is remapped to a different value, to be clearly separate from valid windows values.
* Bitmap Decoder can now decode BitmapArray
* Add tests for bitmap metadata decoing. Fix an issue that a bitmap with a v5 header would be set in the metadata as an v4 header.
* Fixed issue with decoding bitmap arrays: color map size was not determined correctly. Added more test images.
* Refactor colormap size duplicate declaration.
* Fixed an issue, that when an unsupported bitmap is loaded the typ marker was not correctly shown in the error message
* Add bitmap decoder option, how to treat skipped pixels for RLE
* Refactored bitmap tests into smaller tests, instead of just one test which goes through all bitmap files
* Add another adobe v3 header bitmap testcase
* Using the constant from BmpConstants to Identify bitmaps
* Bitmap decoder now can handle oversized palette's
* Add test for invalid palette size
* Renamed RleUndefinedPixelHandling to RleSkippedPixelHandling
* Explicitly using SystemDrawingReferenceDecoder in some BitmapDecoder tests
* Add test cases for unsupported bitmaps
* Comparing RLE test images to reference decoder only on windows
* Add test case for decoding winv4 fast path
* Add another 8 Bit RLE test with magick reference decoder
* Optimize RLE skipped pixel handling
* Refactor RLE decoding to eliminate code duplication
* Using MagickReferenceDecoder for the 8-Bit RLE test
* Implemented encoding of 16 bits per pixel bitmaps
* Add unit tests for 16 bit encoding and Bgra5551 conversion
* Add additional Bgra5551 pixel conversion tests
* Add Bgra5551 tests for Short2/4 and HalfVector2/4
* Use scaled vector conversion
* first version of sliding window adaptive histogram equalization
* going now from top to bottom of the image, added more comments
* using memory allocator to create the histogram and the cdf
* mirroring rows which exceeds the borders
* mirroring also left and right borders
* gridsize and cliplimit are now parameters of the constructor
* using Parallel.For
* only applying clipping once, effect applying it multiple times is neglectable
* added abstract base class for histogram equalization, added option to enable / disable clipping
* small improvements
* clipLimit now in percent of the total number of pixels in the grid
* optimization: only calculating the cdf until the maximum histogram index
* fix: using configuration from the parameter instead of the default
* removed unnecessary loops in CalculateCdf, fixed typo in method name AddPixelsToHistogram
* added different approach for ahe: image is split up in tiles, cdf is computed for each tile. Grey value will be determined by interpolating between 4 tiles
* simplified interpolation between the tiles
* number of tiles is now fixed and depended on the width and height of the image
* moved calculating LUT's into separate method
* number of tiles is now part of the options and will be used with the sliding window approach also, so both methods are comparable
* removed no longer valid xml comment
* attempt fixing the borders
* refactoring to improve readability
* linear interpolation in the border tiles
* refactored processing the borders into separate methods
* fixing corner tiles
* fixed build errors
* fixing mistake during merge from upstream: setting test images to "update Resize reference output because of improved ResizeKernelMap calculations"
* using Parallel.ForEach for all inner tile calculations
* using Parallel.ForEach to calculate the lookup tables
* re-using pre allocated pixel row in GetPixelRow
* fixed issue with the border tiles, when tile width != tile height
* changed default value for ClipHistogram to false again
* alpha channel from the original image is now preserved
* added unit tests for adaptive histogram equalization
* Update External
* 2x faster adaptive tiled processor
* Remove double indexing and bounds checks
* Begin optimizing the global histogram
* Parallelize GlobalHistogramEqualizationProcessor
* Moving sliding window from left to right instead of from top to bottom
* The tile width and height is again depended on the image width: image.Width / Tiles
* Removed keeping track of the maximum histogram position
* Updated reference image for sliding window AHE for moving the sliding window from left to right
* Removed unnecessary call to Span.Clear(), all values are overwritten anyway
* Revert "Moving sliding window from left to right instead of from top to bottom"
This reverts commit 8f19e5edd2.
# Conflicts:
# src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs
* Split GetPixelRow in two version: one which mirrors the edges (only needed in the borders of the images) and one which does not
* Refactoring and cleanup sliding window processor
* Added an upper limit of 100 tiles
* Performance tweaks
* Update External
* Use more accuracy when calculating variance. Fix#866
* Add unit tests
* Add test that fails with old image.
* Make IFrameQuantizer IDisposable
* Update GifEncoderCore.cs