Image adjustment nodes restructure (#1013)

* Add macro for creation of Map image nodes

* Move nodes to adjustments module

* Add Saturation and Lightness to hue shift node

* Fix raster node macro

* Add Threshold Node

* Convert all adjustment nodes to new format

* Start implementing vibrance node

* Remove package-lock.json

* Code review

---------

Co-authored-by: isiko404 <isihd.ko@gmail.com>
Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
Dennis Kobert
2023-02-09 01:17:09 +01:00
committed by Keavon Chambers
parent 202b0ee6ed
commit 8e3480e952
6 changed files with 222 additions and 198 deletions

View File

@@ -5,14 +5,8 @@ use crate::Node;
pub mod color;
pub use self::color::Color;
#[derive(Debug, Clone, Copy, Default)]
pub struct GrayscaleColorNode;
#[node_macro::node_fn(GrayscaleColorNode)]
fn grayscale_color_node(input: Color) -> Color {
let avg = (input.r() + input.g() + input.b()) / 3.0;
Color::from_rgbaf32_unchecked(avg, avg, avg, input.a())
}
pub mod adjustments;
pub use adjustments::*;
#[derive(Debug, Default)]
pub struct MapNode<MapFn> {
@@ -237,36 +231,6 @@ fn brighten_color_node(color: Color, brightness: f32) -> Color {
Color::from_rgbaf32_unchecked(per_channel(color.r()), per_channel(color.g()), per_channel(color.b()), color.a())
}
#[derive(Debug)]
pub struct GammaColorNode<Gamma> {
gamma: Gamma,
}
#[node_macro::node_fn(GammaColorNode)]
fn gamma_color_node(color: Color, gamma: f32) -> Color {
let per_channel = |col: f32| col.powf(gamma);
Color::from_rgbaf32_unchecked(per_channel(color.r()), per_channel(color.g()), per_channel(color.b()), color.a())
}
#[cfg(not(target_arch = "spirv"))]
pub use hue_shift::HueShiftColorNode;
#[cfg(not(target_arch = "spirv"))]
mod hue_shift {
use super::*;
#[derive(Debug)]
pub struct HueShiftColorNode<Angle> {
angle: Angle,
}
#[node_macro::node_fn(HueShiftColorNode)]
fn hue_shift_color_node(color: Color, angle: f32) -> Color {
let hue_shift = angle;
let [hue, saturation, lightness, alpha] = color.to_hsla();
Color::from_hsla(hue + hue_shift / 360., saturation, lightness, alpha)
}
}
#[derive(Debug)]
pub struct ForEachNode<Iter, MapNode> {
map_node: MapNode,
@@ -410,7 +374,7 @@ mod test {
#[test]
fn map_node() {
// let array = &mut [Color::from_rgbaf32(1.0, 0.0, 0.0, 1.0).unwrap()];
GrayscaleColorNode.eval(Color::from_rgbf32_unchecked(1., 0., 0.));
GrayscaleNode.eval(Color::from_rgbf32_unchecked(1., 0., 0.));
/*let map = ForEachNode(MutWrapper(GrayscaleNode));
(&map).eval(array.iter_mut());
assert_eq!(array[0], Color::from_rgbaf32(0.33333334, 0.33333334, 0.33333334, 1.0).unwrap());*/