mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-04 05:18:19 +00:00
Add Minimum and Maximum option to Threshold node (#1029)
This might be usefull later when spliting Images into Seperate Images for each Channel, as then the other modes might behave weirdly Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
6caed9e761
commit
4bb4e2c22e
2 changed files with 24 additions and 2 deletions
|
@ -11,11 +11,19 @@ pub enum LuminanceCalculation {
|
|||
SRGB,
|
||||
Perceptual,
|
||||
AverageChannels,
|
||||
MinimumChannels,
|
||||
MaximumChannels,
|
||||
}
|
||||
|
||||
impl LuminanceCalculation {
|
||||
pub fn list() -> [LuminanceCalculation; 3] {
|
||||
[LuminanceCalculation::SRGB, LuminanceCalculation::Perceptual, LuminanceCalculation::AverageChannels]
|
||||
pub fn list() -> [LuminanceCalculation; 5] {
|
||||
[
|
||||
LuminanceCalculation::SRGB,
|
||||
LuminanceCalculation::Perceptual,
|
||||
LuminanceCalculation::AverageChannels,
|
||||
LuminanceCalculation::MinimumChannels,
|
||||
LuminanceCalculation::MaximumChannels,
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,6 +33,8 @@ impl std::fmt::Display for LuminanceCalculation {
|
|||
LuminanceCalculation::SRGB => write!(f, "sRGB"),
|
||||
LuminanceCalculation::Perceptual => write!(f, "Perceptual"),
|
||||
LuminanceCalculation::AverageChannels => write!(f, "Average Channels"),
|
||||
LuminanceCalculation::MinimumChannels => write!(f, "Minimum Channels"),
|
||||
LuminanceCalculation::MaximumChannels => write!(f, "Maximum Channels"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,6 +53,8 @@ fn luminance_color_node(color: Color, luma_calculation: LuminanceCalculation) ->
|
|||
LuminanceCalculation::SRGB => color.luminance_srgb(),
|
||||
LuminanceCalculation::Perceptual => color.luminance_perceptual(),
|
||||
LuminanceCalculation::AverageChannels => color.average_rgb_channels(),
|
||||
LuminanceCalculation::MinimumChannels => color.minimum_rgb_channels(),
|
||||
LuminanceCalculation::MaximumChannels => color.maximum_rgb_channels(),
|
||||
};
|
||||
|
||||
// TODO: Remove conversion to linear when the whole node graph uses linear color
|
||||
|
@ -188,6 +200,8 @@ fn threshold_node(color: Color, luma_calculation: LuminanceCalculation, threshol
|
|||
LuminanceCalculation::SRGB => color.luminance_srgb(),
|
||||
LuminanceCalculation::Perceptual => color.luminance_perceptual(),
|
||||
LuminanceCalculation::AverageChannels => color.average_rgb_channels(),
|
||||
LuminanceCalculation::MinimumChannels => color.minimum_rgb_channels(),
|
||||
LuminanceCalculation::MaximumChannels => color.maximum_rgb_channels(),
|
||||
};
|
||||
|
||||
if luminance >= threshold {
|
||||
|
|
|
@ -200,6 +200,14 @@ impl Color {
|
|||
(self.red + self.green + self.blue) / 3.
|
||||
}
|
||||
|
||||
pub fn minimum_rgb_channels(&self) -> f32 {
|
||||
self.red.min(self.green).min(self.blue)
|
||||
}
|
||||
|
||||
pub fn maximum_rgb_channels(&self) -> f32 {
|
||||
self.red.max(self.green).max(self.blue)
|
||||
}
|
||||
|
||||
// From https://stackoverflow.com/a/56678483/775283
|
||||
pub fn luminance_srgb(&self) -> f32 {
|
||||
0.2126 * self.red + 0.7152 * self.green + 0.0722 * self.blue
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue