Overview

SaturateTransitionEffectLib transitions between images by manipulating color saturation, wrapping the FireMonkey TSaturateTransitionEffect component. During the transition, the source image desaturates toward grayscale at the midpoint, then the target image emerges with increasing saturation — creating a dramatic, cinematic color-drain effect.

PropertyDetails
LibrarySaturateTransitionEffectLib
Prefixsaturatrans_
WrapsTSaturateTransitionEffect
Functions13
TypeTransition effect
CategoryCountDescription
Creation / Destruction2Create and free effect
Target Image3Set/get/load target bitmap
Progress2Get/set transition progress
Effect Control2Enabled get/set
Error Handling4Error codes and messages
🎨 Color Drama: The saturation transition is ideal for artistic or cinematic effects. The source image fades to near-grayscale at the midpoint, then the target image blooms with color — great for mood-shifting scene changes.

Cross-Platform Support

PlatformSupport
Windows✅ Full support
Linux✅ Full support
Android✅ Full support

Creation & Destruction

saturatrans#(parent#)

Creates a new saturate transition effect attached to the specified visual control.

ParameterTypeDescription
parent#PointerTarget visual control (e.g., image)
ReturnsPointerEffect handle, or 0 on failure

saturatrans_free(effect#)

Destroys the effect and releases associated resources.

Error Handling

FunctionSignatureDescription
saturatrans_error()saturatrans_error@Returns last error code (0 = none)
saturatrans_errormsg$()saturatrans_errormsg$@Returns last error message
saturatrans_strerror$(code)saturatrans_strerror$@nConverts error code to text
saturatrans_clearerror()saturatrans_clearerror@Clears the error state

Target Image

FunctionSignatureDescription
saturatrans_target#(effect#, bitmap#)saturatrans_target#@##Sets target from bitmap pointer
saturatrans_target#(effect#)saturatrans_target#@#Gets target bitmap pointer
saturatrans_loadtarget#(effect#, url$)saturatrans_loadtarget#@#$Loads target from URL or file
⚠ Target Required: Transition effects need a target image. Always load a target before animating progress.

Progress

FunctionSignatureDescription
saturatrans_progress#(effect#, value)saturatrans_progress#@#nSet progress (0.0–1.0)
saturatrans_progress(effect#)saturatrans_progress@#Get current progress
ValueVisual State
0.0Source image (full color)
0.25Source losing saturation
0.5Near-grayscale midpoint
0.75Target gaining color
1.0Target image (full color)

Effect Control

FunctionSignatureDescription
saturatrans_enabled#(effect#, value)saturatrans_enabled#@#nEnable (1) or disable (0)
saturatrans_enabled(effect#)saturatrans_enabled@#Gets enabled state

Complete Examples

Example 1: Slider-Controlled Transition

╯ saturate-slider.bas
let frm# = Pointer#(0)
let img# = Pointer#(0)
let trans# = Pointer#(0)
let trkProg# = Pointer#(0)
let lblProg# = Pointer#(0)

frm# = form#("Saturate Transition", 450, 400)

img# = image#(frm#)
image_bounds#(img#, 125, 30, 200, 150)
image_load#(img#, "https://picsum.photos/200/150?random=1")

trans# = saturatrans#(img#)
saturatrans_loadtarget#(trans#, "https://picsum.photos/200/150?random=2")

lblProg# = label#(frm#, "Progress: 0.00", 50, 200)
trkProg# = trackbar#(frm#)
trackbar_bounds#(trkProg#, 50, 230, 350, 30)
trackbar_max#(trkProg#, 100)
trackbar_value#(trkProg#, 0)
trackbar_onchange#(trkProg#, "OnProgress")

form_show(frm#)

function OnProgress(sender#) local p
  let p = trackbar_value(trkProg#) / 100
  saturatrans_progress#(trans#, p)
  label_text#(lblProg#, "Progress: " + stri$(p, 2))
endfunction

Example 2: Animated Transition

╯ animated-saturate.bas
let frm# = Pointer#(0)
let img# = Pointer#(0)
let trans# = Pointer#(0)
let tmr# = Pointer#(0)
let btn# = Pointer#(0)
let progress = 0

frm# = form#("Animated Saturate", 400, 350)

img# = image#(frm#)
image_bounds#(img#, 100, 30, 200, 150)
image_load#(img#, "https://picsum.photos/200/150?random=1")

trans# = saturatrans#(img#)
saturatrans_loadtarget#(trans#, "https://picsum.photos/200/150?random=2")

tmr# = timer#()
timer_interval#(tmr#, 30)
timer_enabled#(tmr#, 0)
timer_ontimer#(tmr#, "Animate")

btn# = button#(frm#, "Transition!")
button_bounds#(btn#, 140, 210, 120, 30)
button_onclick#(btn#, "StartTransition")

form_show(frm#)

function StartTransition(sender#)
  progress = 0
  timer_enabled#(tmr#, 1)
  button_enabled#(btn#, 0)
endfunction

function Animate(sender#)
  progress = progress + 0.02
  saturatrans_progress#(trans#, progress)
  
  if progress >= 1 then
    timer_enabled#(tmr#, 0)
    button_enabled#(btn#, 1)
  endif
endfunction

Example 3: Toggle Effect

╯ toggle-saturate.bas
let frm# = Pointer#(0)
let img# = Pointer#(0)
let trans# = Pointer#(0)
let btn# = Pointer#(0)
let isOn = 1

frm# = form#("Toggle Saturate", 400, 350)

img# = image#(frm#)
image_bounds#(img#, 100, 30, 200, 150)
image_load#(img#, "https://picsum.photos/200/150?random=1")

trans# = saturatrans#(img#)
saturatrans_loadtarget#(trans#, "https://picsum.photos/200/150?random=2")
saturatrans_progress#(trans#, 0.5)

btn# = button#(frm#, "Disable Effect")
button_bounds#(btn#, 130, 210, 140, 30)
button_onclick#(btn#, "Toggle")

form_show(frm#)

function Toggle(sender#)
  if isOn = 1 then
    saturatrans_enabled#(trans#, 0)
    isOn = 0
    button_text#(btn#, "Enable Effect")
  else
    saturatrans_enabled#(trans#, 1)
    isOn = 1
    button_text#(btn#, "Disable Effect")
  endif
endfunction

Best Practices

PracticeWhy
Always load a target image before animatingTransitions need a target to resolve to
Use colorful source imagesThe desaturation effect is most visible on vibrant photos
Slower progress (0.01 per tick) enhances the mood shiftGives the grayscale midpoint time to register visually
Pair with BrightTransition for combined effectSaturation + brightness creates dramatic cinematic transitions

Quick Reference

FunctionSignatureDescription
CREATION & DESTRUCTION
saturatrans#(parent#)saturatrans#@#Create effect
saturatrans_free(effect#)saturatrans_free@#Destroy effect
TARGET IMAGE
saturatrans_target#(effect#, bitmap#)saturatrans_target#@##Set target bitmap
saturatrans_target#(effect#)saturatrans_target#@#Get target bitmap
saturatrans_loadtarget#(effect#, url$)saturatrans_loadtarget#@#$Load target from URL/file
PROGRESS
saturatrans_progress#(effect#, value)saturatrans_progress#@#nSet progress (0–1)
saturatrans_progress(effect#)saturatrans_progress@#Get progress
EFFECT CONTROL
saturatrans_enabled#(effect#, value)saturatrans_enabled#@#nEnable/disable
saturatrans_enabled(effect#)saturatrans_enabled@#Get enabled state
ERROR HANDLING
saturatrans_error()saturatrans_error@Last error code
saturatrans_errormsg$()saturatrans_errormsg$@Last error message
saturatrans_strerror$(code)saturatrans_strerror$@nCode to text
saturatrans_clearerror()saturatrans_clearerror@Clear error state

See Also

LibraryDescription
BrightTransitionEffectLibBrightness-based transition
FadeTransitionEffectLibCross-fade transition
MonochromeEffectLibStatic grayscale effect