1# Release Notes 2 3All notable changes to [Boost.GIL](https://github.com/boostorg/gil/) project will be documented in this file. 4The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). 5 6## [Unreleased] 7 8## [1.72.0] - 2019-12-11 9 10### Added 11- GSoC 2019: Lanczos resampling for image down scaling ([PR #309](https://github.com/boostorg/gil/pull/309)). 12- GSoC 2019: Methods for binary thresholding, inverted binary thresholding and truncation thresholding ([PR #313](https://github.com/boostorg/gil/pull/313)). 13- GSoC 2019: Otsu thresholding method ([PR #314](https://github.com/boostorg/gil/pull/314)). 14- GSoC 2019: Adaptive thresholding using mean or gaussian-weighted sum of the neighbourhood area ([PR #315](https://github.com/boostorg/gil/pull/315)). 15- GSoC 2019: Harris response calculation (corner detector without non-maximum filtering) ([PR #350](https://github.com/boostorg/gil/pull/350)). 16- GSoC 2019: Hessian corner detector ([PR #364](https://github.com/boostorg/gil/pull/364)). 17- GSoC 2019: Types for defining 2D kernel, `kernel_2d` and `kernel_2d_fixed`, in Numeric extension ([PR #361](https://github.com/boostorg/gil/pull/361)). 18- GSoC 2019: Implementation of 2D convolution as new function `convolve_2d` ([PR #367](https://github.com/boostorg/gil/pull/367)). 19- GSoC 2019: Box filtering using the average filter ([PR #383](https://github.com/boostorg/gil/pull/383)). 20- GSoC 2019: Blur function based on normalized mean filter ([PR #383](https://github.com/boostorg/gil/pull/383)). 21- GSoC 2019: Sobel and Scharr operators ([PR #392](https://github.com/boostorg/gil/pull/392)). 22- GSoC 2019: Median filter to remove noise from image ([PR #393](https://github.com/boostorg/gil/pull/393)). 23- Continued adding new test cases and significantly improved overall test coverage. 24- Documented purpose of `cached_location_t` ([PR #287](https://github.com/boostorg/gil/pull/287)). 25- Function `convolve_1d` in Numeric extension for convenient use of `convolve_rows` and `convolve_cols` ([PR #347](https://github.com/boostorg/gil/pull/347) and [PR #367](https://github.com/boostorg/gil/pull/367)). 26- Function `extend_boundary` in Numeric extension to perform image boundary extension ([PR #386](https://github.com/boostorg/gil/pull/386)). 27- Project release notes maintained in Markdown file `RELEASES.md` ([PR #404](https://github.com/boostorg/gil/pull/404)). 28 29### Changed 30- Move all tests, core features and extensions, inside `test/` directory ([PR #302](https://github.com/boostorg/gil/pull/302)). 31 32### Removed 33- Replace Boost.MPL with Boost.MP11 ([PR #274](https://github.com/boostorg/gil/pull/274)). 34- Removed use of Boost.TypeTraits ([PR #274](https://github.com/boostorg/gil/pull/274)). 35- Dropped support for GCC <= 4.8 ([PR #296](https://github.com/boostorg/gil/pull/296)). 36- Remove `include/boost/gil/version.hpp` file as unused ([PR #403](https://github.com/boostorg/gil/pull/403)). 37 38### Fixed 39- Undetermined value of default-initialized channel and pixel objects ([PR #273](https://github.com/boostorg/gil/pull/273)). 40- Undefined behaviour due to `std::is_trivially_default_constructible` specializations ([PR #284](https://github.com/boostorg/gil/pull/284)). 41- Crash when reading PNG files with an invalid header ([PR #385](https://github.com/boostorg/gil/pull/385)). 42- Applied the [Rule of Three](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)) for numerous types. 43- Removed uses of deprecated implicit definition of defaulted copy assignment operator or copy constructor. 44 45## [1.68.0] - 2018-08-09 46 47### Added 48- The library now requires a C++11-compliant compiler. 49- Added Toolbox extension following the [review and acceptance into Boost](https://lists.boost.org/boost-announce/2011/01/0281.php). 50 51### Changed 52- The I/O extensions have been entirely rewritten as I/O v2, [reviewed and accepted into Boost](https://lists.boost.org/boost-announce/2011/01/0281.php). 53- Documentation has been reformatted and updated. 54 55### Removed 56- The existing I/O v1 extension has been replaced with I/O v2. 57 58## [1.53.0] - 2013-02-04 59 60### Fixed 61- Fixed self-assignment warnings (Trac [#4919](https://svn.boost.org/trac10/ticket/4919)). 62 63## [1.35.0] - 2008-03-29 64 65### Added 66- First Boost release of Generic Image Library developed by Lubomir Bourdev and Hailin Jin following the [review and acceptance into Boost](https://lists.boost.org/Archives/boost/2006/11/112896.php). 67 68--------------------------------------------------------------------- 69 70## Pre-Boost History of the Generic Image Library (GIL) by Adobe 71 72The log of changes prior the first release of GIL as part of Boost 73was collected from https://stlab.adobe.com/gil/news.html site and 74linked PDF documents with detailed changes. 75 76--------------------------------------------------------------------- 77 78## [2.1.1] - 2007-09-15 79 80### Changed 81- Swapped template arguments for `color_element_type`, `color_element_reference_type` and `color_element_const_reference_type` to take `ColorBase` first for consistency with the other similar metafunctions. 82 83### Fixed 84- Minor bugs fixed. 85 86## [2.1.0] - 2007-06-17 87 88### Added 89- Added support for accessing raw memory from image views by getting raw pointer to the beginning of the memory 90 associated with a homogeneous image view using new functions `interleaved_view_get_raw_data` or `planar_view_get_raw_data`. 91- Support for non-byte-aligned images (e.g. 6-bit RGB222, or 1-bit grayscale). 92 To support bit distance, we are using the same classes that were providing byte distance (`byte_addressible_step_iterator`, `byte_addressible_2d_locator`, etc.) 93 except that now they operate on memory units instead of bytes. 94 A memory unit can currently be either a byte or a bit. 95- New `byte_to_memunit` function required by the `MemoryBasedIteratorConcept`, which specifies the number of bits per memory unit (either 1 or 8). 96- New classes for references and iterators over bit-aligned pixels: `bit_aligned_pixel_reference`, `bit_aligned_pixel_iterator`. 97 The memory unit of bit aligned pixel iterators is a bit, i.e. `byte_to_unit<bit_aligned_pixel_iterator<T> >::value == 8`. 98- The `value_type` of a bit-aligned image is a `packed_pixel` (new name, see below). 99 A packed pixel is a pixel that is byte-aligned but whose channels may not be byte aligned. 100 There is a strong analogy with the way interleaved and planar images are implemented, with `packed_pixel` corresponding 101 to `pixel`, `bit_aligned_pixel_reference` corresponding to `planar_pixel_reference` 102 and `bit_aligned_pixel_iterator` corresponding to `planar_pixel_iterator`. 103- New metafunction `bit_aligned_image_type` for constructing bit-aligned images. 104 A bit-aligned image is an image whose pixels may not be byte-aligned (such as an RGB222 image). 105- New metafunction `pixel_value_type` for constructing homogenous pixel value from elements. 106- New metafunction `packed_pixel_type` for constructing homogenous packed pixel from elements. 107- New metafunction `packed_image_type` for constructing packed images with packed pixel as its `value_type`. 108 109### Changed 110- Renamed `heterogeneous_packed_pixel` to `packed_pixel`. 111- Renamed `ByteAdvancableIteratorConcept` to `MemoryBasedIteratorConcept`. 112- Renamed `byte_addressable_{step_iterator,2d_locator}` to `memory_based_{step_iterator,2d_locator}`. 113- Renamed `byte_{advance,advanced,distance,step}` to `memunit_{advance,advanced,distance,step}`, 114- Renamed `locator::row_bytes()` to `locator::row_size()` and `locator::pix_bytestep()` to `locator::pixel_size()`. 115- Simplified `packed_channel_reference` and `packed_dynamic_channel_reference` by removing the `BitField` parameter (it is now computed automatically). 116- Improved `channel_convert` - it is faster by switching to floating-point math only if necessary. 117 118### Fixed 119- Fixed a roundoff bug in the conversion (related to floating-point math switching). 120- Fixed histogram regression tests. 121 122## [2.0.x] - 2007-03-27 123 124### Changed 125- Minor bug fixes. 126- Regression test improvements. 127 128### Removed 129- Removed any external dependencies from the regression tests. 130 131## [2.0.0] - 2007-03-08 132 133### Added 134- Further Boost integration: 135 - Directories follow the Boost convention. 136 - Different models are usually now split in separate files. 137 - Renamed some files for better consistency. 138 - Renamed classes, functions and template arguments with longer but clearer and more consistent names. 139- New `deprecated.hpp` - a file that maps many of the deprecated names to current ones. 140 Including it will help porting your code to GIL 2.0. After porting to GIL 2.0, however, 141 make sure that your code works when this file is not included. 142- New `swap` function required for reference proxies, since the `std::swap` default does not do the right thing. 143- Metafunctions `iterator_type_from_pixel` and `view_type_from_pixel` to allow creating standard iterators and views associated with a pixel type. 144- New `scoped_channel_value`, a channel adaptor that changes the operational range of a channel. `bits32f` is defined as a `float` with range `0.0` to `1.0`. 145- New `packed_channel_value`, `packed_channel_reference` and `packed_dynamic_channel_reference` which model channels operating on bit ranges. 146- New `heterogeneous_packed_pixel`, a model of a pixel whose channels are bit ranges (e.g. 16-bit RGB pixel in the 565 format). 147- Metafunctions to get the k-th element of a color base (or its reference): `kth_semantic_element_type`, `kth_semantic_element_reference_type`, `kth_semantic_element_const_reference_type`. 148- Metafunctions to operate on pixel iterator: `const_iterator_type`, `iterator_is_mutable`, `is_iterator_adaptor`. 149- New image view algorithms `uninitialized_fill_pixels`, `uninitialized_copy_pixels` and method `is_1d_traversable`. 150- Added support for creating images with a new value to fill. 151 152### Changed 153- Updated the design guide and tutorial, updated syntax of concepts to the latest concepts proposal. 154- In `image`, `image_view`, `any_image`, `any_image_view`: 155 There are no longer global functions `get_width()`, `get_height()`, `get_dimensions()`, `num_channels()`. 156 Use methods `width()`, `height()`, `dimensions()` instead. 157- In models of pixel, pixel iterator, pixel locator, image view and image: 158 There used to be different ways of getting to a pixel, channel, color space, etc. of an image view, 159 pixel, locator, iterator and image (e.g. traits, member typedefs). 160 Now all pixel-based GIL constructs (pixels, pixel iterators, locators, image views and images) model 161 `PixelBasedConcept`, which means they provide the following metafunctions: `color_space_type`, `channel_mapping_type`, `is_planar`, `num_channels` 162 and for homogeneous constructs we also have: `channel_type`. 163 To get the pixel type or pixel reference/const reference type of an image, image view, locator 164 and pixel, use member typedefs `value_type`, `reference` and `const_reference`. 165- In `locator`, `image`, `image_view`, `any_image` and `any_image_view`: 166 Removed `dynamic_x_step_t`, `dynamic_y_step_t`, `dynamic_xy_step_t` and `dynamic_xy_step_transposed_t` 167 as member typedefs of locators and image views. 168 Instead, there are separate concepts `HasDynamicXStepTypeConcept`, `HasDynamicYStepTypeConcept`, 169 `HasTransposedTypeConcept` which all GIL-provided locators, views and images model. 170 Those concepts require a metafunction to get the corresponding type. 171 Analogously, all GIL pixel iterators model `HasDynamicXStepTypeConcept`. 172- In channel, the min and max value is now part of the channel traits. 173 For all built-in types the channel range equals the physical range (as determined by `std::numeric_traits<T>::max()`). 174- Provide `channel_convert` support to convert between any of the GIL-provided channel types. 175 The operation is also consistent - conversion is done as a linear mapping that maps the min/max to the min/max. 176- In pixel, major redesign of pixel-level constructs. 177 Renamed `color_base` to `homogeneous_color_base` and defined it once, not for each color space. 178 The color base is a first-class concept and allows to model any bundle of color elements. 179 Work needed to define a new color space has been simplified a lot. 180 All former pixel-level algorithms and accessors now operate on color bases. 181 The elements of a color base can be accessed by physical or semantic index or by name (channel names 182 can no longer be accessed as members of the pixel e.g. `my_pixel.gray = 0`), use `get_color` instead). 183- In color base, algorithms now can take heterogeneous pixels (i.e. pixels each channel of which may have a different type). 184 The `color_convert` can operate on heterogeneous pixels with the exception of to/from RGBA. 185- In image, the class `image` is no longer templated over the image view. It is now templated over pixel value. 186- In dynamic image, instead of removed `cross_vector_image_types` and `cross_vector_image_view_types`, create MPL vector to enumerate types. 187- Renamed algorithms `{copy,equal,fill,for_each,generate,max,min,transform}_channels` to `static_{copy,equal,fill,for_each,generate,max,min,transform}`. 188- Rename metafunctions `channel` to `at_c`, `semantic_channel` to `semantic_at_c`, `get_nth_channel` to `dynamic_at_c`. 189- Renamed `planar_{ptr,ref}` to `planar_pixel_{iterator,reference}`. 190- Renamed `PixelConcept` to `HomogeneousPixelConcept`. 191- Renamed `HeterogeneousPixelConcept` to `PixelConcept`. 192- Renamed `pixel_image_iterator` to `iterator_from_2d`. 193- Renamed `is_contiguous` to `is_1d_traversable`. 194- Renamed `membased_2d_locator` to `byte_addressable_2d_locator`. 195- Renamed `resize_clobber_image` to `image::recreate`. 196 197### Fixed 198- Now compiles with GCC 4.1.1. 199- Fixed some bugs in defining reference proxies. 200 201### Removed 202- Flattened the `core` directory as part of Boost integration. 203- Got rid of channel accessors from pixel types. 204- Got rid of `pixel_traits`. Use nested typedefs `value_type`, `reference` and `const_reference` or metafunctions implementing `PixelBasedConcept`. 205- Got rid of `pixel_iterator_traits`. Use `std::iterator_traits`, `PixelBasedConcept` metafunctions or the new metafunctions for pixel iterators. 206- Got rid of the ability to directly access pixels through image, only through views. The image no longer models STL's random access container concept. 207- No more LAB and HSB color space, because there is no color conversion support implemented for these. New color spaces can be added with just a few lines of code. 208 209## [1.x] - 2007-01-03 210 211### Added 212- Restored back the ability to assign a channel to a grayscale pixel. 213 214### Changed 215- Fixed some minor issues with color converted views of dynamic images. 216 217## [1.x] - 2006-11-07 218 219GIL accepted to Boost. 220 221GIL's Boost review was successful and GIL will be part of the Boost libraries. 222It will most likely first appear in the 1.35 version of Boost. 223In the future our web page will continue to provide you with the latest 224improvements to GIL, as we have the flexibility to release more frequently than Boost. 225 226## [1.x] - 2006-10-20 227 228### Added 229- New regression tests. 230- Source code of usage examples is available to download from the website. 231 232### Changed 233- Minor changes to GIL core. 234 235## [1.x] - 2006-10-02 236 237### Added 238- First version of the Numeric extension. 239 The extension provides some basic image processing algorithms, such as convolution and resampling. 240- Introduction of pixel traits. 241 242### Changed 243- Improved consistent use of MPL predicates and standardized template parameter names. 244 245## [1.x] - 2006-09-20 246 247### Added 248- GIL now allows users to overload the default color conversion with one of their own. 249- Section in the design guide describes how to overload default color conversion. 250 251### Changed 252- Color conversion improvements. 253 254## [1.0] - 2006-08-29 255 256### Added 257- Pixel dereference adaptors are introduced. 258- Locator concepts/models are made more generic. 259- Example of creating the Mandelbrot set is described in the tutorial. 260 261### Changed 262- It is now easier to construct virtual image views. 263 264## [] - 2006-06-27 265 266### Added 267- A GIL Flash presentation is posted (aka video lecture). 268 269## [] - 2006-06-14 270 271### Added 272- GIL homepage goes live 273