[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

@@ -0,0 +1,26 @@
import org.openrndr.extra.fx.color.Duotone
import org.openrndr.application
import org.openrndr.draw.createEquivalent
import org.openrndr.draw.loadImage
import org.openrndr.math.mod_
fun main() {
application {
program {
val image = loadImage("demo-data/images/image-001.png")
val filteredImage = image.createEquivalent()
val duotone = Duotone()
extend {
duotone.labInterpolation = seconds.mod_(2.0) < 1.0
duotone.apply(image, filteredImage)
drawer.image(filteredImage)
}
}
}
}

View File

@@ -0,0 +1,25 @@
import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.draw.createEquivalent
import org.openrndr.draw.loadImage
import org.openrndr.extra.fx.color.DuotoneGradient
fun main() = application {
program {
val image = loadImage("demo-data/images/image-001.png")
val filteredImage = image.createEquivalent()
val duotone = DuotoneGradient()
duotone.labInterpolation = false
extend {
duotone.labInterpolation = true
duotone.backgroundColor0 = ColorRGBa.BLACK
duotone.foregroundColor0 = ColorRGBa.RED
duotone.backgroundColor1 = ColorRGBa.BLUE
duotone.foregroundColor1 = ColorRGBa.WHITE
duotone.rotation = seconds * 45.0
duotone.apply(image, filteredImage)
drawer.image(filteredImage)
}
}
}

View File

@@ -0,0 +1,25 @@
import org.openrndr.extra.fx.color.Duotone
import org.openrndr.application
import org.openrndr.draw.createEquivalent
import org.openrndr.draw.loadImage
import org.openrndr.extra.fx.color.Posterize
import org.openrndr.math.mod_
fun main() {
application {
program {
val image = loadImage("demo-data/images/image-001.png")
val filteredImage = image.createEquivalent()
val posterize = Posterize()
extend {
posterize.levels = 2
posterize.apply(image, filteredImage)
drawer.image(filteredImage)
}
}
}
}

View File

@@ -0,0 +1,26 @@
import org.openrndr.application
import org.openrndr.draw.createEquivalent
import org.openrndr.draw.loadImage
import org.openrndr.extra.fx.dither.LumaHalftone
import org.openrndr.math.mod_
fun main() {
application {
program {
val image = loadImage("demo-data/images/image-001.png")
val filteredImage = image.createEquivalent()
val lumaHalftone = LumaHalftone()
extend {
lumaHalftone.rotation = -15.0
lumaHalftone.freq0 = 100.0
lumaHalftone.gain1 = 1.0
lumaHalftone.threshold = 0.5
lumaHalftone.phase0 = seconds*0.1
lumaHalftone.phase1 = -seconds*0.1
lumaHalftone.apply(image, filteredImage)
lumaHalftone.invert = seconds.mod_(2.0) < 1.0
drawer.image(filteredImage)
}
}
}
}

View File

@@ -0,0 +1,27 @@
import org.openrndr.extra.fx.color.RgbToOkLab
import org.openrndr.extra.fx.color.OkLabToRgb
import org.openrndr.application
import org.openrndr.draw.ColorType
import org.openrndr.draw.createEquivalent
import org.openrndr.draw.loadImage
/**
* This demonstrates converting a [ColorBuffer] from and to (OK)LAB color space using the [RgbToOkLab] and [OkLabToRgb]
* filters. The (OK)Lab representation is signed and requires a floating point representation.
*/
fun main() {
application {
program {
val rgbToOkLab = RgbToOkLab()
val okLabToRgb = OkLabToRgb()
val image = loadImage("demo-data/images/image-001.png")
val labImage = image.createEquivalent(type = ColorType.FLOAT32)
rgbToOkLab.apply(image, labImage)
okLabToRgb.apply(labImage, image)
extend {
drawer.image(image)
}
}
}
}