* 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
* Added support for OS/2 version 2 bitmaps
* throw NotSupportedException, if the file header type is not BM
* renamed Os2v2 to Os2v2Size
* Added BmpThrowHelper similar to the JpegThrowHelper
* decoding bitmaps with Bitfields masks
* added testcases for Bitfields bitmaps
* added parsing of the complete bitmap V4 header to get the color masks infos for the BITFIELDS compression
* writing now explicitly a Bitamp v3 header (40 bytes)
* added test image for issue #735
* fixed rescaling 5-bit / 6-bit to 0 - 255 range
* BitmapEncoder now writes BMP v4 header
* using MemoryMarshal.Cast to simplify parsing v4 header
* added testcases for bitmap v3, v4, v5
* Bitmap encoder writes again V3 header instead of V4. Additional fields for V4 are zero anyway.
* added parsing of special case for 56 bytes headers
* using the alpha mask in ReadRgb32BitFields() when its present
* added support for bitmasks greater then 8 bits per channel
* using MagickReferenceDecoder reference decoder for the test with 10 bits pixel masks
* changed bitmap constants to hex
* added enum for the bitmap info header type
* added support for 52 bytes header (same as 56 bytes without the alpha mask)
* clarified comment with difference between imagesharp and magick decoder for Rgba321010102
* BmpEncoder now writes a V4 info header and uses BITFIELDS compression
* workaround for issue that the decoder does not decode the alpha channel correctly: For V3 bitmaps, the alpha channel will be ignored during encoding
* Fix#732