[orx-fx] Add Duotone, DuotoneGradient, LumaHalftone, Posterize, RgbToOkLab, OkLabToRgb

This commit is contained in:
Edwin Jakobs
2022-02-07 09:04:17 +01:00
parent 4fa6c05652
commit 52124ea409
20 changed files with 543 additions and 6 deletions

View File

@@ -1,9 +1,22 @@
package org.openrndr.extra.fx.color
import org.openrndr.draw.Filter
import org.openrndr.extra.fx.*
import org.openrndr.extra.fx.fx_rgb_to_oklab
import org.openrndr.extra.fx.fx_rgb_to_ycbcr
import org.openrndr.extra.fx.fx_ycbcr_to_rgb
import org.openrndr.extra.fx.mppFilterShader
import org.openrndr.extra.shaderphrases.preprocess
import org.openrndr.extras.color.phrases.ColorPhraseBook
class RgbToYCbcr : Filter(mppFilterShader(fx_rgb_to_ycbcr, "rgb-to-ycbcr"))
class YcbcrToRgb : Filter(mppFilterShader(fx_ycbcr_to_rgb, "ycbcr_to_rgb"))
class YcbcrToRgb : Filter(mppFilterShader(fx_ycbcr_to_rgb, "ycbcr_to_rgb"))
class RgbToOkLab : Filter(mppFilterShader(run {
ColorPhraseBook.register()
fx_rgb_to_oklab.preprocess()
}, "rgb-to-oklab"))
class OkLabToRgb : Filter(mppFilterShader(run {
ColorPhraseBook.register()
fx_oklab_to_rgb.preprocess()
}, "oklab-to-rgb"))

View File

@@ -0,0 +1,37 @@
package org.openrndr.extra.fx.color
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.Filter
import org.openrndr.draw.filterShaderFromCode
import org.openrndr.extra.fx.fx_duotone
import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.shaderphrases.preprocess
import org.openrndr.extras.color.phrases.ColorPhraseBook
import org.openrndr.extras.color.presets.CORAL
import org.openrndr.extras.color.presets.DARK_GRAY
import org.openrndr.extras.color.presets.NAVY
@Description("Duotone")
class Duotone : Filter(filterShaderFromCode(run {
ColorPhraseBook.register()
fx_duotone.preprocess()
}, "duotone")) {
@ColorParameter("background", order = 0)
var backgroundColor: ColorRGBa by parameters
@ColorParameter("foreground", order = 1)
var foregroundColor: ColorRGBa by parameters
@BooleanParameter("LAB interpolation", order = 2)
var labInterpolation: Boolean by parameters
init {
backgroundColor = ColorRGBa.NAVY
foregroundColor = ColorRGBa.CORAL
labInterpolation = true
}
}

View File

@@ -0,0 +1,49 @@
package org.openrndr.extra.fx.color
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.Filter
import org.openrndr.draw.filterShaderFromCode
import org.openrndr.extra.fx.fx_duotone_gradient
import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter
import org.openrndr.extra.shaderphrases.preprocess
import org.openrndr.extras.color.phrases.ColorPhraseBook
import org.openrndr.extras.color.presets.CORAL
import org.openrndr.extras.color.presets.NAVY
@Description("Duotone Gradient")
class DuotoneGradient : Filter(filterShaderFromCode(run {
ColorPhraseBook.register()
fx_duotone_gradient.preprocess()
}, "duotone-gradient")) {
@ColorParameter("background 0", order = 0)
var backgroundColor0: ColorRGBa by parameters
@ColorParameter("foreground 0", order = 1)
var foregroundColor0: ColorRGBa by parameters
@ColorParameter("background 1", order = 2)
var backgroundColor1: ColorRGBa by parameters
@ColorParameter("foreground 1", order = 3)
var foregroundColor1: ColorRGBa by parameters
@BooleanParameter("LAB interpolation", order = 4)
var labInterpolation: Boolean by parameters
@DoubleParameter("rotation", -180.0, 180.0, order = 5)
var rotation: Double by parameters
init {
backgroundColor0 = ColorRGBa.NAVY
foregroundColor0 = ColorRGBa.CORAL
backgroundColor1 = ColorRGBa.BLACK
foregroundColor1 = ColorRGBa.WHITE
rotation = 0.0
labInterpolation = true
}
}

View File

@@ -0,0 +1,32 @@
package org.openrndr.extra.fx.color
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.Filter
import org.openrndr.draw.filterShaderFromCode
import org.openrndr.extra.fx.fx_duotone
import org.openrndr.extra.fx.fx_posterize
import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.ColorParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.IntParameter
import org.openrndr.extra.shaderphrases.preprocess
import org.openrndr.extras.color.phrases.ColorPhraseBook
import org.openrndr.extras.color.presets.CORAL
import org.openrndr.extras.color.presets.DARK_GRAY
import org.openrndr.extras.color.presets.NAVY
@Description("Posterize")
class Posterize : Filter(filterShaderFromCode(fx_posterize, "posterize")) {
@IntParameter("levels", 2, 32, order = 0)
var levels: Int by parameters
@IntParameter("window", 1, 8, order = 0)
var window: Int by parameters
init {
levels = 4
window = 1
}
}

View File

@@ -43,7 +43,8 @@ class Lenses : Filter(mppFilterShader(fx_lenses, "block-repeat")) {
rows = 6
columns = 8
distort = 0.0
scale = 1.0
rotation = 0.0
bicubicFiltering = true
}
}

View File

@@ -0,0 +1,53 @@
package org.openrndr.extra.fx.dither
import org.openrndr.draw.Filter
import org.openrndr.draw.filterShaderFromCode
import org.openrndr.extra.fx.fx_luma_halftone
import org.openrndr.extra.parameters.BooleanParameter
import org.openrndr.extra.parameters.Description
import org.openrndr.extra.parameters.DoubleParameter
@Description("Luma Halftone")
class LumaHalftone: Filter(filterShaderFromCode(fx_luma_halftone, "luma-halftone")) {
@DoubleParameter("scale", 1.0, 30.0, precision = 4)
var scale: Double by parameters
@DoubleParameter("threshold", 0.0, 1.0, precision = 4)
var threshold: Double by parameters
@DoubleParameter("rotation", -180.0, 180.0)
var rotation: Double by parameters
@DoubleParameter("freq0", 1.0, 400.0)
var freq0: Double by parameters
@DoubleParameter("freq1", 1.0, 400.0)
var freq1: Double by parameters
@DoubleParameter("gain1", -2.0, 2.0)
var gain1: Double by parameters
@DoubleParameter("phase0", -1.0, 1.0)
var phase0: Double by parameters
@DoubleParameter("phase1", -1.0, 1.0)
var phase1: Double by parameters
@BooleanParameter("invert")
var invert: Boolean by parameters
init {
scale = 3.0
rotation = 0.0
threshold = 0.5
freq1 = 20.0
freq0 = 10.0
gain1 = 0.1
phase0 = 0.0
phase1 = 0.0
invert = true
}
}