From c46ae0f42067df3020c2c4d56421f5922a9a2bed Mon Sep 17 00:00:00 2001 From: awxkee Date: Wed, 5 Jun 2024 17:18:21 +0100 Subject: [PATCH] Fix Scaling trait for Linear Scaler --- Cargo.toml | 2 +- app/src/main.rs | 19 ++++++++++--------- src/threading_policy.rs | 13 +++++++------ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4df35c4..774d80f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ workspace = { members = ["app"] } [package] name = "pic-scale" -version = "0.1.1" +version = "0.1.2" edition = "2021" description = "High performance image scaling" readme = "README.md" diff --git a/app/src/main.rs b/app/src/main.rs index 2bf3c3c..5e42e3a 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -1,19 +1,19 @@ use std::time::Instant; +use fast_image_resize::images::Image; +use fast_image_resize::FilterType::Lanczos3; use fast_image_resize::{ CpuExtensions, IntoImageView, PixelType, ResizeAlg, ResizeOptions, Resizer, }; -use fast_image_resize::FilterType::Lanczos3; -use fast_image_resize::images::Image; -use image::{EncodableLayout, GenericImageView}; use image::io::Reader as ImageReader; +use image::{EncodableLayout, GenericImageView}; use pic_scale::{ImageSize, ImageStore, ResamplingFunction, Scaler, Scaling, ThreadingPolicy}; fn main() { // test_fast_image(); - let img = ImageReader::open("./assets/asset_middle.jpg") + let img = ImageReader::open("./assets/beach_horizon.png") .unwrap() .decode() .unwrap(); @@ -22,13 +22,14 @@ fn main() { let start_time = Instant::now(); - let mut scaler = Scaler::new(ResamplingFunction::Bartlett); - scaler.set_threading_policy(ThreadingPolicy::Single); + let mut scaler = Scaler::new(ResamplingFunction::Cubic); + scaler.set_threading_policy(ThreadingPolicy::Adaptive); let store = - ImageStore::::from_slice(&mut bytes, dimensions.0 as usize, dimensions.1 as usize); - let resized = scaler.resize_rgb( - ImageSize::new(dimensions.0 as usize / 1, dimensions.1 as usize / 1), + ImageStore::::from_slice(&mut bytes, dimensions.0 as usize, dimensions.1 as usize); + let resized = scaler.resize_rgba( + ImageSize::new(dimensions.0 as usize / 3, dimensions.1 as usize / 3), store, + true, ); let elapsed_time = start_time.elapsed(); diff --git a/src/threading_policy.rs b/src/threading_policy.rs index 8dc3e17..c7fc23e 100644 --- a/src/threading_policy.rs +++ b/src/threading_policy.rs @@ -6,6 +6,7 @@ */ use rayon::ThreadPool; + use crate::ImageSize; #[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] @@ -27,7 +28,6 @@ impl<'a> ThreadingPolicy { } } } - } impl<'a> ThreadingPolicy { @@ -36,11 +36,12 @@ impl<'a> ThreadingPolicy { return None; } let threads_count = self.get_threads_count(for_size); - let shared_pool = rayon::ThreadPoolBuilder::new() + return match rayon::ThreadPoolBuilder::new() .num_threads(threads_count) - .use_current_thread() .build() - .unwrap(); - return Some(shared_pool); + { + Ok(pool) => Some(pool), + Err(_) => None, + }; } -} \ No newline at end of file +}