97 Commits
Author SHA1 Message Date
Kirill Kuzminykh e1afd34c9c Added optimisation for processing U8x2 images by MulDiv with helps of NEON SIMD instructions. 2022-11-11 23:11:38 +04:00
Kirill Kuzminykh 55ee4f1ec8 Improved optimisation of MulDiv with helps of NEON SIMD for U8x4 pixels. 2022-11-10 00:48:22 +04:00
Kirill Kuzminykh f2ef3d1b04 Fixed error in implementation of MulDiv::divide_alpha() and MulDiv::divide_alpha_inplace() for U16x4 pixels with optimisation with helps of SSE4.1 and AVX2. 2022-11-09 03:22:13 +04:00
Kirill Kuzminykh 4ecb03336c Added optimisation for processing U16x4 images by MulDiv with helps of NEON SIMD instructions. 2022-11-08 00:33:08 +04:00
Kirill Kuzminykh d65ddab704 Added support of optimisation with helps of NEON SIMD for convolution of U16x4 images. 2022-11-02 23:43:22 +04:00
Kirill Kuzminykh 6c89f4fbae - Internals of PixelComponentMapper changed to use heap to store its data.
- Fixed couple tests.
2022-10-29 02:13:55 +04:00
Kirill Kuzminykh 2f88f9df16 - Added method CpuExtensions::is_supported(&self).
- Refactored tests.
- Fixed GitHub Actions for run check and test the crate.
2022-10-29 01:14:08 +04:00
Kirill Kuzminykh 7b5a1238ca Static variables SRGB_MAPPER and GAMMA22_MAPPER replaced by functions to create these mappers. 2022-10-28 20:59:41 +04:00
Kirill Kuzminykh ff2837d704 - Added support of optimisation with help of NEON SIMD for convolution of U8x4 images.
- Added optimisation for processing `U8x4` images by `MulDiv` with helps of `NEON SIMD` instructions.
2022-10-19 00:25:14 +04:00
Kirill Kuzminykh e3b64bf7b1 - Trait Pixel renamed into PixelExt and changed.
- All pixel types (`U8`, `U8x2`, ...) replaced by type aliases for new generic structure `Pixel`. Use method `new()` to create instance of one pixel.
- Added module `color` for working with colorspace and gamma.
2022-10-07 20:39:21 +04:00
Kirill Kuzminykh 39f7841030 - Breaking changes:
- Struct `ImageView` replaced by enum `DynamicImageView`.
  - Struct `ImageViewMut` replaced by enum `DynamicImageViewMut`.
  - Trait `Pixel` changed:
    - Associated type `ComponentsCount` renamed into `CountOfComponents`.
    - Associated type `ComponentCountOfValues` renamed into `CountOfComponentValues`.
    - Associated method `components_count` renamed into `count_of_components`.
    - Associated method `component_count_of_values` renamed into `count_of_component_values`.
- Added generic structs `ImageView` and `ImageViewMut`.
- Added module `color` for working with colorspace and gamma.
- Added functions `change_type_of_pixel_components` and
  `change_type_of_pixel_components_dyn` to change type of pixel's
  components in whole image.
- Added generic trait `IntoPixelComponent<Out: PixelComponent>`.

### Example application

- Added option `--high_precision` to use `u16` as pixel components
  for intermediate image representation.
- Added converting of source image into linear colorspace before it will be resized.
  Destination image will be returned into original colorspace before it will be saved.
2022-09-14 00:07:03 +03:00
Kirill Kuzminykh c454c3b990 Added functions for converting image colorspace. 2022-08-31 22:38:27 +03:00
Kirill Kuzminykh 6483439ab3 Fixed resizing when the destination image has the same dimensions as the source image (#9). 2022-07-14 23:29:45 +03:00
Kirill Kuzminykh 5b89090d11 - Fixed benchmarks for resizing images with alpha channel using the resizer crate.
- Removed `image` crate from benchmarks for resizing images with alpha.
- Added method `Image::copy(&self) -> Image<'static>`.
2022-06-28 23:50:14 +03:00
Kirill Kuzminykh 891312a4bb Added support of new type of pixels PixelType::U16x4. 2022-06-26 19:16:22 +03:00
Kirill Kuzminykh 20d0578306 Added support of new type of pixels PixelType::U16x2 2022-06-22 21:52:47 +03:00
Kirill Kuzminykh d719e2ab75 - Extracted helping code for testing into separate crate.
- Optimized convolution of U16 images with help of AVX2.
2022-05-31 22:58:10 +03:00
Kirill Kuzminykh 5954725342 Added support of new type of pixels PixelType::U16. 2022-05-22 22:51:05 +03:00
Kirill Kuzminykh 13b2cf99b7 Added optimisation for convolution of U8x2 images with helps of SSE4.1. 2022-05-19 20:15:16 +03:00
Kirill Kuzminykh 1be895f332 - Added optimisation for processing `U8x2 images by MulDiv with helps of SSE4.1 and AVX2` instructions.
- Added optimisation for convolution of ``U16x2`` images with helps of ``AVX2`` instructions.
2022-05-13 00:03:40 +03:00
Kirill Kuzminykh 0a19acf252 - Added support of new type of pixels `PixelType::U8x2`.
- Added into ``MulDiv`` support of images with pixel type ``U8x2``.
2022-05-01 23:09:25 +03:00
Kirill Kuzminykh d5d46066f4 Removed unnecessary test. 2022-03-24 00:37:32 +03:00
Kirill Kuzminykh d657aef4cf - Allowed to create an instance of Image, ImageVew and ImageViewMut from a buffer larger than necessary (#5).
- Removed methods: `Image::from_vec_u32()`, `Image::from_slice_u32()`.
- Removed error `InvalidBufferSizeError`.
2022-03-22 00:18:26 +03:00
Kirill Kuzminykh bcf86e0cf1 - Added optimisation of convolution U16x3 images with helps of `SSE4.1 and AVX2` instructions.
- Added partial optimisation of convolution U8 images with helps of ``SSE4.1`` instructions.
2022-03-22 00:16:57 +03:00
Kirill Kuzminykh 146777ddbc - Added support of new type of pixels PixelType::U16x3.
- Added variant `U16x3` into the enum `PixelType`.
2022-01-27 20:25:44 +03:00
Kirill Kuzminykh d4ead15856 - Added optimisation of multiplying and dividing image by alpha channel with helps of `SSE4.1` instructions.
- Improved performance of dividing image by alpha channel without forced SIMD instructions.
- Deleted variant `SSE2` from enum ``CpuExtensions``.
2022-01-12 23:38:32 +03:00
Kirill Kuzminykh 2a5efa4105 Fixed tests in README.md 2021-12-14 00:45:21 +03:00
Kirill Kuzminykh 5fdbd5793b Fixed compile errors on non-x86 architectures. 2021-12-14 00:33:54 +03:00
Kirill Kuzminykh d76faadd2b Fixes after merge. 2021-12-14 00:25:02 +03:00
Kirill Kuzminykh a8f36e65c3 Merge branch 'main' into dev
# Conflicts:
#	CHANGELOG.md
#	tests/resize_tests.rs
2021-12-14 00:19:29 +03:00
Kirill Kuzminykh 044478620d - Added optimisation of convolution U8x3 images with helps of `AVX2` instructions.
- Fixed error in code for convolution U8x4 images with helps of ``SSE4.1`` instructions.
- Fixed error in code for convolution U8 images with helps of ``AVX2`` instructions.
2021-12-14 00:17:45 +03:00
Kirill Kuzminykh 769355df03 Added support for running tests on architectures other than x86_64. 2021-11-26 10:21:24 +03:00
Kirill Kuzminykh 79c8fceeb1 - Added support of new type of pixels PixelType::U8x3 (with auto-vectorization for SSE4.1).
- Exposed module `fast_image_resize::pixels` with types `U8x3`, `U8x4`, `F32`, `I32`, `U8` used as wrappers for represent type of one pixel of image.
- Some optimisations in code of convolution written in Rust (without intrinsics for SIMD).
- Added variant `U8x3` into the enum `PixelType`.
- Changed internal tuple structures inside of variant of `ImageRows` and `ImageRowsMut` enums.
2021-11-18 21:48:32 +03:00
Kirill Kuzminykh d918386dfb Added optimisation of convolution grayscale images (U8) with helps of `AVX2` instructions. 2021-11-13 20:40:25 +03:00
Kirill Kuzminykh 61b94a05fc - Added support of the new type of pixels - U8.
- Added benchmarks for resizing of U8 image.
2021-10-23 12:10:33 +03:00
Kirill Kuzminykh 4cb09ed0ac - Added method SrcImageView.set_crop_box_to_fit_dst_size().
- Fixed out-of-bounds error during resize with cropping.
- Refactored `ImageData`.
2021-08-28 20:45:31 +03:00
Kirill Kuzminykh c5d527704c - Added method SrcImageView.set_crop_box_to_fit_dst_size().
- Fixed out-of-bounds error during resize with cropping.
- Refactored `ImageData`.
2021-08-28 17:12:53 +03:00
Kirill Kuzminykh 638064223e Fixed link to CHANGELOG.md in the README.md. 2021-08-18 23:19:04 +03:00
Kirill Kuzminykh ef12fe1d76 Changed example of code in README.md 2021-08-01 01:28:24 +03:00
Kirill Kuzminykh 69bef66fa1 Added generator of MD table with result of resizing speed comparison. 2021-07-30 01:22:16 +03:00
Kirill Kuzminykh 93f7cbb161 Added error `InvalidBufferSizeError`. 2021-07-27 22:57:58 +03:00
Kirill Kuzminykh 5295315342 Added method `ImageData<Vec<u32>>::from_buffer()` 2021-07-13 20:54:41 +03:00
Kirill Kuzminykh dec46ebb49 Small optimisation of resizing of images with U8x4 pixel format. 2021-07-13 00:13:17 +03:00
Kirill Kuzminykh 6214456ddd Added some comments for example code 2021-07-04 16:45:44 +03:00
Kirill Kuzminykh bb1dd8e2b8 - Added benchmarks for resizing with target-cpu=native. 2021-07-04 00:41:38 +03:00
Kirill Kuzminykh d098c213ad Added benchmarks result into README.md 2021-07-03 17:02:57 +03:00
Kirill Kuzminykh d8033a005b Initial commit 2021-07-03 14:29:58 +03:00