# General > Application Testing >  Program Testers

## reexre

hello

I know this is not the right place, but because I think people who watch *this* are few, and I received no feedback, I point out here that I need help, suggestions and feedback about my project.

It's a project about image manipulation performed by custom effects flow.
It's PORTABLE (No installation needed)

This project was born with the intention of creating an unconventional image editor.
It is full of image processing software, and, I really did not care to create one like many others.
The intent was to create a program that gave the user the ability to create and customize the graphic effect.
In fact, the beauty of this program is that the image processing process consists of a series of modules that can be assembled as desired to create the desired effect.
In fact, this project was also born to simplify the creation of the "Cartoonize" effect to myself. (instead of having to fight modifying the code, I just had to use the mouse and connect and set module parameters)
This process consists of a flow of information that runs through the different modules.
Each of these modules performs a different transformation operation on the data.
Each module has its inputs and outputs consisting of 2D arrays.
The node to load the image can be "INPUT" for the use of 3 channels (RGB) or "INPUTA" for the use of 4 channels (RGBA)
The range of the initial RGB values ​​are transformed from 0-255 (integer) to 0-1 (float).
Since the modules are in cascade this remapping range allows a more precise final result. (a sort of continuous vs discreet)
In general, the outputs of the modules also have a range of 0-1, even if this is not always true, some modules can output negative ​​or greater than 1 values.
At the end of the flow it is always necessary to place an output module. This can be "OUTPUT" which corresponds to "save as JPG" or "PNGout" which corresponds to "Save as PNG"
Obviously these modules transform their inputs from the 0-1 range to the 0-255 range.

Now more than three years have passed since the beginning of this project.
I made steps and added many interesting features.
This happened a little at a time, in small steps. As a new idea appeared to me, I tried to implement it. (you can take a look at History)

For any type of bugs or requests (for example new Module-effect) please do not hesitate to write.

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Take a Look at some Photo Effect that can be done.*

*List of Nodes*

*Web Page*





HISTORY:
*Update 0.3.2795 (21-Feb-2020)*
[Modules]
- New: FLOWPaint:  Compute ETF and paint along it (Similar to BilaOA)
- New: FLOWPaint3: Compute ETF for each of the 3 channels and paint along it (Similar to BilaOA3)
- New: TinyPlanet: Simple TinyPlanet effect.
- New: Script11: Experimental VB6-Script processing for 1 inp 1 out channel.
- New: Script33: Experimental VB6-Script processing for 3 inps 3 outs channels.
- stdDEV: Added "Scaled Radius" and "Circle Shaped" options.
- DoG: Bug fix (R-Ratio) update 0.3.1264 (28-Sep-2018)
[Other]
- vbRichClient: Newest Version 5.0.74.
- Cleanup unused Module Output Memory.
- Increased max Photo Size.
- Backend UI optimizations.


*Update 0.3.2726* (03-Feb-2020)
[Modules]
- FastEPS; FastEPS3: Added Gaussian Range Weight
[Other]
- Small fixes (CenterOn)

*Update 0.3.2705* (05-Dec-2019)
[Modules]
- New: Falloff: Nice Curve (can be S-Shaped).
- New: Falloff3: Nice Curve (can be S-Shaped) (3 channels).
- BLUR; BLUR3: Added 'Scaled Radius' option.
- MIX3; Added 'global mean' and 'Glb Gray BT601'
- KuwANISO: Improved.
[Other]
- Faster Startup: Avoid writing (icons) contents to Disk.
- UI: blinking disconnected inputs.


*Update 0.3.2671* (22-Nov-2019)
[Modules]
- New: Drawtext: Basic text on image.
- New: Nrmlzd.vec: Vector Normalization.
- New: Kuwahara3: 3 Channels Kuwahara.
- New: BilaOA3: Orientation Aligned Bilateral Filter on 3 channels.
- Kuwahara: Added various Sectors-Modes.
- KuwANISO: New algorithm. (WIP)
- DoGbyF and BilaOA: faster.
- Mix2; Mix2x3 added Vivid Light.
- Quantize: Added various Uniform Soft Staircase.
- PNGout: renamed to PNGoutA.
- New: PNGOut: Save as PNG without the Alpha input Channel.
[Other]
- Internal Changes: SaveProject function.
- Modules and other minimal UI changes.
- Lock UI while filtering projects List.
- Slight change on Lab2RGB color space conversion.
- Implemented Stretch Project-flow to Window Size (Not applied).

*Update 0.3.2553* (20-oct-2019)
[Modules]
- New: xPencil2: Artistic pencil draw.
- TiltShift: Added Circular and elliptical Shapes.
- xBiro: Renamed to xScribble
[Other]
- Added Category Filter to FX-selector.
- ReStyle of Activation Form.
- Small performance improvements for BilaOA and GUI


*Update 0.3.2500* (18-Sep-2019)
[Modules]
. Stippling2: Speed and aesthetic improvements.
- NEW: WhiteBal.: WhiteBalance using GrayWorld assumption.
[Other]
- Improved "Auto Arrange" algorithm.
- Added some CueBannerText(s)
- Fix watermark error on demo version.


*Update 0.3.2255* (20-Ago-2019)
[Modules]
- New: Stippling2: Voronoi based stippling. Good but slow.
- New: xPainter2: Painter Effect V2.
- New: JigSaw Puzzle (thanks to Olaf Schmidt)
- New: Saturation: Saturation separately in R G B channels.
- New: Skin: Skin tone adjust (WIP)
- New: Straighten: Auto Straighten 
- New: Droste: Experimental Droste  Effect (WIP).
- New: SoftThrsh3: Soft Thresholding (3 Channels)
- Q-Bertify: Added "just hexagon" option (Hexagonal pixelate)
- Voronoi: Modified algorithm (similar to Stippling2)
[Other]
- Vertical Scrollbars sizes DPI aware.
- vbRichClient: Newest Version 5.0.69


*Update 0.3.2000* (28-May-2019)
[Modules]
- New: MarchingS: Marching Squares abstraction.
- New: Median3: Median Filter on 3 channels
- New: Sphere: From flat to sphere effect (thanks to Olaf Schmidt)
- Median: Faster Algorithm.
- xChord: Extened text output filename
- LocalHEii: revisited
[Other]
- Restyle of a parameter setting widget.


*Update 0.3.1805* (30-Mar-2019)
[Modules]
- New: Abs3: Absolute values (3 channels).
- BlurCirc;BlurCirc3 renamed to ShapeBlur(3) and extended with quite fast implementation of
  other shapes like Triangle Square Pentagon Hexagon Line Star Moon Heart Eye.
- Suppress-Node renamed to SoftThrsh.
[Other]
- Downloading Project-Thumbs from https://raw.githubusercontent.com/mi...FX/HTML/Thumbs
  +Optimization

*Update 0.3.1780* (19-Mar-2019)
[Modules]
[Other]
- Fixed possible crash on program exit while downloading Project-Thumbs

*Update 0.3.1777* (18-Mar-2019)
[Modules]
- NEW: Gain;Gain3: Inigo Quilez gain function
- NEW: LocalGain;LocalGain3: Local Inigo Quilez gain function
- NEW: BlurCirc;BlurCirc3:   Circle Blur
- NEW: Clamp3: Clamp values between a range (3 channels)
- NEW: vSplit: Video split before-after (WIP)
- FLOW: Revisited.
- BLUR;BLUR3: Implementation of 'moving-average' Algorithm (Thanks TheTrick & Mikle)
- FastEPS;FastEPS3: New Parameter: Range Difference Mode (Linear;Squared)
- FastEPS;FastEPS3: Small speed gain. 
- Normalize3: Option new mean as source (New mean = -1) now is per channel instead of global.
- Mix2x3: Added clamp outputs 0-1 Option.
- Mean: Added Alpha Trimmed Mean.
[Other]
- Save about 50MBytes ZIP file by downloading project-thumbs preview on Project-mouse-over.
- Speed gain thanks to Jacob Roman's "Faux"DoEvents. (by using GetQueueStatus)
- Use of Pade Approximant for Cos and Sin functions.
- On first run ask for desktop-shortcut creation.
- Changes on Widget FileList
- vbRC5BaseDlls folder merged to BIN folder.


*Update 0.3.1600* (20-Dec-2018)
[Modules] 
- NEW: FastEPS: Fast edge preserve smoothing filter.
- NEW: FastEPS3: 3 channles Fast edge preserve smoothing filter.
- NEW: Stippling: Poission Disc Distribution Stippling effect.
- NEW: Fractalize: Experimental Picture to fractal effect
- NEW: Stipple2: New video Stipple algorithm. 
- NEW: Mix2W: Mix 2 channels by 2 weights (same way as Mix3w)
- NEW: Clamp: Clamp Values between a custom Range.
- NEW: ABS: Absoulte Value.
- NEW: FLOW2: New Edge tangent Flow algorithm.
- NEW: Q-Bertify: Q-Bert blocks 
- NEW: DCT and IDCT: Pure Discrete cosine transform (and inverse).
- NEW: Corner: SUSAN Corners Detection.
- NEW: RGB>LCH;LCH>RGB: Added Cie Lch colorspace conversion.
- RGB>HSL;HSL>RGB: Added HCL colorspace conversion.(experimental)
- ToneMap; ToneMap3: Added NoHalo(FastEPS) Option.
- Bilateral: New FAST algorithm option.
- BilaOAEX: 'Per level-Bilateral' option with fast algorithm.
- DogByF: (Flow Based Difference of Gaussian) Faster algorithm.
- Stipple: Faster algorithm.
- xChord: Improvements.
- Mosaic: New Algorithm (still incomplete)
- Sauvola: Bug Fix.
[Other]
- Added toggle Projects-Sorting-Mode by Clicking 'Load Project'-Label.
- Faster Tanh and Exp function. (approximated)
- Removed Displayed TXT file extension from Project List Names.
- Removed toggle Fullscreen.


*Update 0.3.1264*  (28-Sep-2018)
[Modules] 
- NEW: Lens: Camera lens distorsion
- NEW: Magnifiers: Magnifier Glass (Hotspot)
- xChord: Improved algorithm.
- Bilateral: Polynomial: Experimental superfast algorithm.
- Normalize; Normalize3: Added New Variance proportionality option.
- DoG: Added "Ratio" parameter.
- xChord: Improved algorithm.
[Other]
- Filter Project checkbox caption and tooltip update after closing the module-selection-window.


*Update 0.3.1153*  (01-ago-2018)
[Modules] 
-Blur; Blur3; Fast Mode
-ToneMap; ToneMap3; LocalMap; DoG; Noise2; PlasticWrap; -Faster (because of Internal faster Blur)
-PlastWrap: Changed 'Details' parameter (Now proportional to image size)
-RGB2HCY and HCY2RGB: reviewed colorspaces conversion algorithm
-EDGES: Reviewed algorithm
[Other]
-Added 'Add FX-Node Selector' Window
-Added Projects-Thumbs Preview. +50 MBytes
-Renaming 'Node' to 'Module'


*Update 0.3.1114* (03-jul-2018)
[Nodes] 
[Other]
-Mousewheel support on Picker Valueinput and Slider
-Mousewheel fix on "Add Node/FX"
-Second Click's issue solved on "Add Node/FX"
-Load Project on FileList Keyboard up/down Arrows (ScrollIndexChange)


*Update 0.3.1102*  (25-jun-2018)
[Nodes] 
-NEW: SmoothMM: Smooth Min/Max
[Other]
-Bug fix on check for updates


*Update 0.3.1100* (24-jun-2018)
[Nodes]
-NEW: ColorContrast: Make Lighter choosen hue and darker complementary hue (inspired by Luminar) 
[Other]
-Auto Adapt screen zoom to current screen DPI
-Animated connections on node click
-Icon minor change


*Update 0.3.1073* (06-jun-2018)
[Nodes]
-New: Mix3W: Mix 3 channels by 3 weights
-New: Technicolor: 2-Strip & 3-Strip Techincolor effect.
-MIX2: New option to clamp output between 0-1
-Pow; Pow3: Option to manage negative input this way: out = Sgn(in)*Abs(in)^Pow
-SNN; SNN3: Algorithm review.
[Other]
-vbRichClient: Newest Version 5.0.66
-Bug Fix: Crash on DropDownList Click


*Update 0.3.1040* (20-Apr-2018)
[Nodes]
-New: FormulaRGB: 3 Output Formulas having 3 inputs.
-New: NNart: Experimental Neural Network Reconstruction.
-New: QuantGNG3: Experimental Growing Neural Gas Quantizer.
-Formula; Formula2; Formula3: A lot faster performance and new inputbox.
-RGBscreen: Revisited to look more like a CRT Screen.
[Other]
-Bug fix on Save Project with "Project Filter" Activated


*Update 0.3.910* (26-Mar-2018)
[Nodes]
-New: Mean : Arithmetic Harmonic Contraharmonic and Geometric mean
-New: Mean3: Arithmetic Harmonic Contraharmonic and Geometric mean (3 channel)
-New: Invert3: Invert 3 channels out=(1-In)
-New: vMotion: Video Motion Blur
-Mix3: Added Gray HSP and PS-like
-ADD & ADD3 added clamp 0-1 option
-Ramp: Small bug fix
-POW: Small bug fix
[Other]
-Auto check for Updates.
-Save "Resize mode" on Settings.ini
-Custom message box
-Node Setting's Auto Apply (Removed "Apply" button)
-Dark gray GUI


*Update 0.3.834* (01-Mar-2018)
[Nodes]
[Other]
-Removed update (download latest version)
-New "Flat" faster GUI

*Update 0.3.783* (21-Feb-2018)
[Nodes]
-NEW: CAIR: Content Aware Image Resize.
-NEW: Plastic: Plastic Wrap Effect.
-NEW: Crop: Crop Top-Bottom Left-Right
-NEW: xPainter: experimental 'Painter effect'
-NEW: xBiro: experimental 'curve effect'
-NEW: xChord: experimental 'chord effect'
-NEW: Sauvola: Sauvola thresholding
-Render3: Allow different sizes between input triplets.
-RGBtweak Renamed to ADD3
-xPOIS: Added 'Source' background
[Other]
-Download latest version if available (click "u" button)
-Import project from Picture: Small bug fix (getProjectAsString)
-Custom Checkbox and DropDown: Right click for Default Value
-Project Description: Allowed all chars but ","


*Update 0.3.580*  (18-Dec-2017)
[Nodes]
-NEW: Stretch;Stretch3: Histogram Stretch.
-NEW: ToneMap,ToneMap3: Tone Mapping for 1 and 3 channels.
-Blur;Blur3: Added BOX blur Algo.
-StdDEV;stdDEV3 (Standard Deviation): Really a lot Faster
-LocalHEii: Little faster
-VRCLAHE: Algo retouch
-BilaOAEX: Pyramids without cairo
-Normalize;Normalize3: Now output range can be not clamped 0-1
-MtBlur;MtBlur3: small bug fix
-Ramp: Bug fix on RepatMode:Standard (Left-Right;Up-Down)
-RGB>HSL;HSL>RGB: Added HSV colorspace conversion.
[Other] 
-Sound: Added checkbox to turn "ready output" sound on/off.
-GUI: Little restyles, lighter nodes and draw speedup.


*
Update 0.3.462* (15-Sep-2017)
[Nodes]
-New: CubicBezier: Cubic Bezier through 2 given points transform.
-New: LocalHE3: Local Histogram Equalization (CLAHE) on 3 channels at one time.
-ThrBlur; ThrBlur3: Optimization (Do not recreate Poisson Disks)
-VRLCN: New variance computation algo.
[Other] 
-FLOW: Improved Smooth Algo
-CannyEdge: Little improvement
-Kmean123D: New algorithm for initial centroids selection: (Kmean++)
-Updated vbRichClient's vbRC5BaseDlls
-PoissonDisk: Applyed Box Muller Transform Distribution
-PopUp Messages: Little Fix
-Fonts: some tweaks
-Nodes tooltip: better (removed newlines)
-Zoom: Smoother

*Update 0.3.400* (05-Apr-2017)
[Nodes]
-INPUT2 added Alpha-Channel node output.
-New INPUTA: Main Input Photo RGB+Alpha Channel
-New PowEx3: Extended Pow (3 channels)
-New DCTEqu: Discrete Cosine Transform Equalizer
-New Normalize: Reset Mean and Variance
-New Normalize3: Reset Mean and Variance
-New LocalNorm.: Local Reset Mean and Variance
-New ClrMatrix: 3x3 Color Matrix
-New RGB>CMYK Colorspace conversion
-New CMYK>RGB Colorspace conversion
-New Palettize: Single Channel to RGB palette using Cos function.
-New Suppress: Cut values between a threshold 
-New Voronoi: Voronoi Tassellation
-New Extent Extent3 & Extent4: Extent/Matting Canvas
-Kmean123D: Optimization (Damping) 
-KuwAniso: Fixing and speed Improvement.
-StdDEV & StdDEV3: Improvements
-Faster ThrBLUR ThrBLUR3 and Bilateral:added Uniform Poisson Disk space-kernel (for big radii)
-Mix3: New Mixmodes: Min;Max;Gray Desaturation;Gray BT.601;Gray BT.709; Gray BT.2020;Abs Greater;Abs Smaller
-Mix2: New mixmodes: SmoothMin;SmoothMax;Abs Greater;Abs Smaller
-xPois: Improvements
[Other] 
-Some Icons restyles
-Bug fix of autoconnect (on no-connections project)
-Bug fix on 5x5 sobel kernel (FLOW)
-Small Bug fix on ProgressBar (1../20)
-Faster Startup (Delay "CC" creation to when it's needed)
-Widget TextUpDown little restyle
-Updated vbRichClient's vbWidgets 
-Added Load GIF and SVG formats
-DoubleClick Editor to Switch FullScreen mode (On/Off)
-Nodes tooltips: Added Input/Output Pins description.
-Added WindowHandle to LoadImage Dialog (Form.hWnd)


*Update 0.3.226* (14-Nov-2016)
[Nodes]
-New Split: Split Channel in 2 halfs (useful for stereo images)
-New Split3: Split 3channels image in 2 halfs (useful for stereo images)
-New POW3: Power of 3 Channels (Like Pow)
-New SpinBLUR: Spin Blur
-New SpinBLUR3: Spin Blur 3 channels
-New RGB>Yxy: RGB to Yxy colorspace conversion
-New Yxy>RGB: Yxy to RGB colorspace conversion
-New HeatMap: Grayscale to HeatMap(rgb)
-New Sorting: Pixel Sorting effect.
-New Solarize: Classic Solarization Filter
-New Solarize3: Classic Solarization Filter
-New OilPaint: Classic OilPainting
-New OilPaint3: Classic OilPainting (RGB)
-New Chroma: Chromaticty colorspace conversion
-New LocalTHR: Local Threshold Binarization
-New LocalOTSU: Experimental Local Otsu
-New Noise2: 3 Levels noise
-DoG: Picture borders fix (Call 2 Blurs instead of in-built blurs)
-HSL: Colorspace conversion added: Darel Rex Finley "HSP"
-StdDEV, TODO StdDEV3: Revisited
[Other] 
-Small bug fix of "Keep same Zoom factor at Program Restart" in some systems.
-Allow more than 3 outputs for Nodes (max 6)
-Fix missing "Background" Folder in Package(s)
-New PopUp-Message Widget.
-Small Interface restyles


*Update 0.3.60* (12-Sept-2016)
[Nodes]
- New RENDER: Draw 2nd channel (Foreground) to the 1st Input (Background) at a given position and size
- New RENDER3: Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at a given position and size
- New RENDERex: Draw 2nd channel (Foreground) to the 1st Input (Background) at given 4 Corners position
- New RENDER3ex: Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at given 4 Corners position
- New MAP: Map input range to a new range given by NewMin and NewMax (Using Input Min & Max Values)
- New MAP3: Like Map for 3 Channels
- New THINNING: ZhangSuen Thinning
- New BLUR3: Gaussian Blur 3 Channles
- New CURVE9: Simple 9Points Spline Curve transformation (X at every 1/8)
- New MUL3: Multiply 3 Channels by 3 given values expressed as percentage
- New LocalMAP: Similar to Map but Locally. WIP!
- OTSU: from 2 Levels (Monochrome) to Multilevels (Max 5)
[Other]
-DPI-Aware GUI (to Zoom Use MouseWheel+CNTRL)
-While Zooming keep Node-Parameters-Container at same screen position
-Keep same Zoom factor at Program Restart (Settings.ini - File)
-Option to see every Node Output by clicking it
-Experimental auto-connect nodes on New Node MouseUp-event
-Auto Set Default Parameters Values when adding new Node
-Node Parameters tweaker: Diplay more than 6 parameters
-LocalHE2: Changes (Mainly ClipLevel parameter scale)
-BLUR: Bug fix (Picture Borders) and optimization
-ACE: Revisited
-VRACE: Revisited
-Portable Self-Extractor Executable Version (Full/Lite)
-Use of CopyMemory (Faster Inter-Nodes Data transfer. Faster Node that have N of Iterations param.)
-UC TextUpDown allows negative values
-Use More Standard MousePointers
-New "Support" Folder


*Update 0.2.1675* (18-Jul-2016)
[Nodes]
- NEW ACE: Adaptive Contrast Enhancement
- NEW VRACE: Variable Radius Adaptive Contrast Enhancement
- NEW CannyEdge: Canny Edge Detector
- NEW OTSU: Otsu monochrome thresholder
- NEW EDGE: Edge by using magnituede of 5x5 Sobel operator
- NEW Stereo: Stereo Ananglyph (Create a Stereo Anaglyph image form 2 input images)
[Other]
- No more use of Cairo internal CalcArc funtion.


*Update 0.2.1652* (05-Jul-2016)
[Nodes]
- NEW LocalHE2: Local Histogram Equalization V2 (CLAHE): works on each pixel.
[Other]
- New DropDownList to select Output Filename Prefix/Postfix based on current used Project.
- Small Bug fix & optimization of HISTO Equ. HistoMATCH LocalHE VRCLAHE


*Update 0.2.1615* (24-May-2016)
[Nodes]
- NEW MIX2 x3: Mix 6 channels 2 by 2 same way as MIX2
- NEW VALUE3 : 3 Constant Values (in 1 node)
- NEW BLEND  : Mix the first-channel with the 2nd-channel by an amount given by 3th Input
- NEW BLEND3 : Mix the 3-first-channels with the 2nd-3-channels by an amount given by 7th Input 
[Other]
- New Button: Delete Project.
- If Node N-Inputs is greater that 3 draw it with bigger height.
- Minor UI restyle
- Small Bug Fix (Removed Screenshot)


*Update 0.2.1600* (01-May-2016)
[Nodes]
- NEW Morpho: Morphological Erosion;Dialtion;Opening;Closing
- NEW Skeleton: Morphological Skeleton
[Other]
- Use MouseWheel to zoom in/out (Keep mouse Left-Button pressed)
- Use MouseWheel-Button Down to reset zoom to 1
- New Project Preview thumbnails.
- New Save Project Dialog.
- Small bug in Save Before & After
- Small bug of Progress Bars
- Small bug on Save Project


*Update 0.2.1547* (01-Apr-2016)
[Nodes]
- NEW TEMP.: Temperature
- NEW VIBRANCE: Vibrance
- NEW CHROMAK: Chromakey blend
- NEW HAZE: Fake Haze effect
[Other]
- Nodes and Global ProgressBar


*Update 0.2.1506* (07-Mar-2016)
[Nodes]
- NEW "HUE Harm": HUE Harmonizer
[Other]
- "Save Before & After" Check Button, to save both INPUT and OUTPUT in the same Picture.


*Update 0.2.1500* (21-Feb-2016)
[Nodes]
- VRLCN:   Changed weight of last Parameter (Radius Selection Sensitivity)
- BILAOA:  Changed way of flow-Smooth ((2nd way))
- RGB>YUV: Added YIQ colorspace conversion.
- NEW "PNG out": Save Output as PNG.
[Other]
- New Program Icon

*Update 0.2.1467*  (07-Jan-2016)

[Nodes]
- NEW BilaOA: Oriented-Aligned Bilateral Filter
- NEW ZMBLUR: Zoom Blur 1 channel
- NEW ZMBLUR3: Zoom Blur 3 channels
- NEW MTBLUR: Motion Blur 1 channel
- NEW MTBLUR3: Motion Blur 3 channels

- MIX2 (Blend): 6 New mix modes:
    Linear Dodge
    Linear Burn
    Linear Light
    Pin Light
    Abs Diff.
    Exclusion
    + Swap Inputs option

- VRLCN: Improvements and more parameters
- FLOW: New 5x5 Dx,Dy Kernels

[Other]
- Bugs fix: StdDEV,StdDEV3



*Update 0.2.1400* (21-Dec-2015)
[Nodes]
- NEW ThrBLUR: - Threshold BLUR
- NEW ThrBLUR3: - Threshold BLUR 3 channels
- GLOW: New Algorithm
[Other]
- BugFix: RGB>HSL Bug fix (Quasimondo)
- BugFix: AutoArrange
- Basic Error-Handler implementation

*Update 0.2.1354* (08-Dec-2015)
[Nodes]
- NEW Mesh: Straight line draw by salient points.
- NEW STROKES: Art-Draw Strokes
- NEW POIS: Art-Draw Pois
- NEW STDDev: Standard Deviation
- NEW STDDev3: Standard Deviation (3 Channels)
- NEW LCN: Local contrast normalization (WIP)
- VRLCN: Little improvements
[Other]
- *** Bilateral: Bug fix on "fast-mode on" *** (Was Causin Crash!)
- Added "Activation-Key-Request Form".
- Added Projects-Filter by Constructor Selection.
- Overall speed improvement.


*Update 0.2.1265* (09-NOV-2015)
[Nodes]
- NEW Diffusion: Iso/Anisotropic Diffusion.
[Other]
- Bilateral: Removed "orientation based"
- Improved Internal Memory Management

*Update 0.2.1222* (27-Oct-2015)
[Nodes]
- NEW VRLCN: Variable Radius Local Contrast Normalization (WIP)
- NEW RGB>YUV , RGB>YCbCr Colorspace conversion
- NEW YUV>RGB , YCbCr>RGB   "
- GLOW: Improved (test it with Glow.txt Projects)
- FLOW: Step back to previous Smooth-algorithm [Before 0.2.1103 15-Sep-2015]
[Other]
- CheckBox, ComboList: Apparence
- Main BackGround: Dark Colored
- About 300Kbytes lighter EXE




Other Videos


*Update 0.2.1162* (10-Oct-2015)
Removed due to 25000 characters  post limit

*Update 0.2.1103* (15-Sep-2015)
Removed due to 25000 characters  post limit

*Update 0.2.998* (19-Aug-2015)
Removed due to 25000 characters  post limit

*Update 0.2.919* (31-jul-2015)
Removed due to 25000 characters  post limit

*Update 0.2.890* (23-jul-2015)
Removed due to 25000 characters  post limit

*Update 0.2.865* (20-jul-2015)
Removed due to 25000 characters  post limit

*Update 0.2.822* (21-jun-2015)
Removed due to 25000 characters  post limit

*Update 0.2.770* (14-jun-2015)
Removed due to 25000 characters  post limit

*Update 0.2.669* (5-jun-2015)
Removed due to 25000 characters  post limit

*Update 0.2.555* (28-may-2015)
Removed due to 25000 characters  post limit

*Update 0.2.471* (20-may-2015)
Removed due to 25000 characters  post limit

----------


## Schmidt

I've checked it out for a few mintues - but had to manually register Colins RichTip.dll,
to make it work.

Not sure, if you used the regfree approach per DirectCOM against the RC5-libs 
(from inside your own executable) ... as we spoke about in a recent thread...

In case you did (within your Exe you creating a New_c entry-point for the RC5 regfree) -
you will need to do the same *within* the RichTip.dll-Project as well (creating New_c regfree).
(alternatively you could include Colins Class as a Private one, directly into your Std-Exe-Project).

Else looking nice (and your knowledge about Vectorizing-Effekts is amazing) - but now,
that you have the RC5-libs "on-board" anyways, you could optimize and straighten out 
a few things I noticed:

- e.g. the dragging of your "processing-nodes" is not as fluent as it could be
(I'd suggest using a cWidgetForm-Panel on your Main-Screen and using a cwProcessing-Widget
for your draggable Processing-Nodes-Containers).
There's Widget-Tutorials on vbRichClient.com, which give an introduction in this regard,
making all kind of Hover-Effects easy as cake (e.g. above your connection-points) - and 
also using different MouseCursors of your own Design (directly from a PNG-resources)
would become very easy (there's an example for that in the Widgets-Tutorial).

Also your Kernel-Pre-Construction at Program-Startup (ending up in your Kernels-SubFolder)
takes quite a bit of time - and looking at, what these routines produce, you should be able to do 
that with Cairo "in a blink of time" (even with a proper Alpha-Channel, saving as PNG instead BMP,
or even create these Kernel-Patterns "live, on demand") using Radial Gradients or the Gaussian-Blur 
which is available on a cCairoSurface-Class - just ask appropriate questions about that, 
when you need a "How-To"-Demo or something.

So, yeah - to sum my critcism up:
Your "backend-routines and filters" are outstanding - your frontend could use some 
polishing (also got an error-message after a run, although the result looked as it should?).

Olaf

----------


## reexre

thank you very much!

Now I had not much time so, I'll read and answer better later

For now I can say that
I updated the project (download again)
with regFree applied at every Class of RichTip

----------


## Tanner_H

Hi reexre.  I had quite a few problems just getting the program to run.  If you provided source code, I imagine I could be a lot more helpful.

- The program installs by default to a non-standard folder
- It forces creation of a start menu entry (this should be optional) and if the user changes the requested start menu folder, it ignores the custom folder.
- After running and initializing brushes (which takes a very long time), it crashes with run-time error 80040000 ("No permission (probably unregistered types in the Interface-Def)").  Maybe this means I need to re-run the installer with admin privileges, but the installer raised a UAC prompt - and I installed the program to an unprotected folder - so that shouldn't be an issue.  This is on Win 7 on a standard user account.
- It doesn't uninstall cleanly (OUT, screenshots folders and log.txt are left behind).

I think you'll get more feedback if you share source code, or at least work through some of the serious issues with installation and setup.  My personal preference would be a portable version that runs in a local folder without the need for setup at all, perhaps using Olaf's suggested regfree approach, above.

----------


## DataMiser

Please note that it is against forum rules to attach exe files. Attachments must be in the form of source code not compiled binaries.

----------


## reexre

Tanner



> it crashes with run-time error 80040000


It's due to unregistered RichTip.dll  as Olaf said: 


> but had to manually register Colins RichTip.dll,
> to make it work.


this issue, should have been solved in last update (about 8 hours ago).
To Each class of RichTip has been applied the Olaf regFree solution.





> - The program installs by default to a non-standard folder


You are right this is not a good approach, but it's to avoid to run it with Administrator privileges (I think the ones that allows to change content of the Program File folder.)
I , before this installer, made one that install in default program file folder, but anytime the program was launched it was ask a permission to run it.
Have to solve this, as you say 


> personal preference would be a portable version that runs in a local folder without the need for setup at all,


 I full agree. The installer is made with Inno Installer. I should find a way to make an installer that install & register vb6runtimes if needed and Extract program and needed subfolders on custom folder. (Now I have no Idea how.. I'll search InnoInstaller Help)




> It forces creation of a start menu entry (this should be optional)


I didnt know it should be optional... have to see how to do it.




> and if the user changes the requested start menu folder, it ignores the custom folder.


Don't know how to do , but I have to solve this.

Thanks!

----------


## Tanner_H

Thanks for the reply, reexre.  




> I should find a way to make an installer that install & register vb6runtimes if needed and Extract program and needed subfolders on custom folder. (Now I have no Idea how.. I'll search InnoInstaller Help)


Right now, I would forget about installing and registering the vb6 runtimes.  They are included by default on every system since Windows XP, so there is really no reason to install them manually.  

This is why I still use VB6 for building portable applications - if you can avoid the use of OCXs (or use a reg-free approach) there are no special run-time dependencies for a VB6 application.  Even with vbRichClient, there's no reason your application can't be totally portable, without any need for setup, using Olaf's advice above.

Once you've got it perfectly working as a portable application, you could always revisit an installer, but I think it's advisable to get the portable version working first.

----------


## reexre

OLAF




> Not sure, if you used the regfree approach per DirectCOM against the RC5-libs
> (from inside your own executable) ... as we spoke about in a recent thread...


Yes, it uses regfree approach




> you will need to do the same *within* the RichTip.dll-Project as well (creating New_c regfree).


In the last update I recompile the richtip.dll with RegFree applied to each of its classes. ( 4)
Each of it has :


```
Private New_c As cConstructor, Cairo As cCairo '<- global defs of the two Main-"EntryPoints" into the RC5
Private Sub Class_Initialize()
    Set New_c = GetInstanceFromBinFolder("vbRichClient5", "cConstructor", "vbRC5BaseDlls")
    Set Cairo = New_c.Cairo
...
...
End Sub
```

But seems not to work... 
Maybe something wrong about folder...


```
Public Function GetInstanceFromBinFolder(ByVal ShortDllFileName As String, ClassName As String, _
                                         Optional RelBinFolderName$ = "Bin") As Object
```

*RelBinFolderName* in this case should be same folder..





> (alternatively you could include Colins Class as a Private one, directly into your Std-Exe-Project).


I tried this approach too, but I got problems with Public/private UDT POINTAPI and RECT.. so I quit this way.





> Widget-Tutorials , different MouseCursors of your own Design (directly from a PNG-resources)


Good suggestion I'll follow... even if Widget seems not so easy ..




> Kernel-Pre-Construction at Program-Startup


At the moment not a big problem, since it occours only on first Run.

Thank You..

I wonder  way the last update ( with RegFree applyed at every RichTip class) seems not to work.

----------


## dday9

I've moved the thread from the VB6 and Earlier forum to the Testers and Testing forum.

Edit - Sorry, meant to move it to the Application Testing forum.

----------


## reexre

TANNER




> They are included by default on every system since Windows XP


Inno Installer , for VB6 program installations, suggests these elements to be installed
"stdole2.tlb"
"msvbvm60.dll"
"oleaut32.dll"
"olepro32.dll"
"asycfilt.dll"
"comcat.dll";

So, these are already in each system ? even 64 bit system ? and need no installation ?
I didnt know , great new!

Have you tried to register the RichTip.dll in vbRC5BaseDlls folder?

----------


## reexre

*Olaf*

I tried again 



> (alternatively you could include Colins Class as a Private one, directly into your Std-Exe-Project)


Now seems to work.
I'll update soon it  in same Download Link

----------


## Tanner_H

> Inno Installer , for VB6 program installations, suggests these elements to be installed
> "stdole2.tlb"
> "msvbvm60.dll"
> "oleaut32.dll"
> "olepro32.dll"
> "asycfilt.dll"
> "comcat.dll";
> 
> So, these are already in each system ? even 64 bit system ? and need no installation ?
> I didnt know , great new!


Yes, they are included by default since Windows XP, even on 64-bit systems.  I'm happy to share the good news.   :Smilie: 

You can see a full list of automatically included VB files here:

https://msdn.microsoft.com/en-us/vstudio/ms788708.aspx




> Have you tried to register the RichTip.dll in vbRC5BaseDlls folder?


No, I unfortunately have not had time, but will look at doing this later.  

Also - do you have any interest in open-sourcing the project?  From the screenshots, it looks like you've developed some really nice code, and I might be interested in contributing to the project.

----------


## Schmidt

> In the last update I recompile the richtip.dll with RegFree applied to each of its classes. ( 4)
> Each of it has :
> 
> 
> ```
> Private New_c As cConstructor, Cairo As cCairo '<- global defs of the two Main-"EntryPoints" into the RC5
> Private Sub Class_Initialize()
>     Set New_c = GetInstanceFromBinFolder("vbRichClient5", "cConstructor", "vbRC5BaseDlls")
>     Set Cairo = New_c.Cairo
> ...


That's not necessary, to do that for each Class, since you can include a Module
into an ActiveX-Dll-Project as well (e.g. name it modMain.bas) and put the following code into it:


```
Option Explicit

Public New_c As cConstructor, Cairo As cCairo '<- global defs of the two Main-"EntryPoints" into the RC5

Sub Main()
Set New_c = GetInstanceFromBinFolder("vbRichClient5", "cConstructor", "")
    Set Cairo = New_c.Cairo
End Sub
```

Then make sure, that you set the ActiveX-Dlls Project-Startup-Options, to use Sub Main()
as the Dll-EntryPoint.

Within the only Public Class of the RichTip-Project (the Class named: RichTip),
you will have to adapt the following in addition:

Change these Type-Definitions to Private Types:


```
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Private Type POINTAPI
   X As Long
   Y As Long
End Type
```

Change this Function-Signature to a Private one:


```
Private Function ClientAreaScreenCoords(pHwnd As Long) As RECT
```

That's it already...




> Maybe something wrong about folder...
> 
> 
> ```
> Public Function GetInstanceFromBinFolder(ByVal ShortDllFileName As String, ClassName As String, _
>                                          Optional RelBinFolderName$ = "Bin") As Object
> ```
> 
> *RelBinFolderName* in this case should be same folder..


Right, and since the App.Path-method from within a compiled ActiveX-Dll resolves
to the Path you placed this Dll in, you shouldn't give a *RelBinFolderName* at all - 
just pass an empty String (when the Dll in question is directly placed beside the RC5-libs already).

Alternatively you could (instead of the "", as I did in the Sub Main() above) have used:
"..\vbRC5BaseDlls" (the double-dots ensure a switch-back by one path-level).





> Good suggestion I'll follow... even if Widget seems not so easy ..


The Tutorial, which you can find here: http://vbrichclient.com/#/en/Demos/GUI/WidgetEngine.htm
starts with really simple examples - just play around a bit, to get "a feeling" for them, before
entering the next Widget-Tutorial-Folder.

Olaf

----------


## reexre

*NEW UPDATE!  v0.0.750
* (same link in Post#1)


*Olaf*
I have included Colins Class as a Private one, directly into the Std-Exe-Project
As you said, I've changed the POINTAPI, RECT and the function ClientAreaScreenCoords as private, and all seems to work.

----------


## reexre

*TANNER*




> do you have any interest in open-sourcing the project? From the screenshots, it looks like you've developed some really nice code, and I might be interested in contributing to the project.


I would appreciated your contribute, that for sure would be very usefull ( times ago I look at your Photodeamon - really great) but I am not going to open-sourcing... .. at least for now.

----------


## ColinE66

Hi reexre - interesting project  :Smilie: 

I noticed that you ship a lot of bmps for the 'app loading' image. I have a nice pre-loader written using RC5 that i will put into the codebank if you are interested? Another member (jpbro, I think?) has some nice RC5 pre-loader code in the Codebank already but mine runs in its own thread.

Let me know if you are interested...

----------


## Tanner_H

> I would appreciated your contribute, that for sure would be very usefull ( times ago I look at your Photodeamon - really great) but I am not going to open-sourcing... .. at least for now.


Okay, no problem.  I will try to guess at implementation details, to hopefully provide useful advice.

First off, this is a really impressive project.  It reminds me a lot of DAWs, with the concept of a "chart" layout, and connecting nodes between operations.  I think it is a really promising approach, with many neat possibilities.

Unfortunately, I think there are two serious problems with the program's current state.

*1) Interface*

I noticed a lot of strange issues with the interface.  For example, when working with wallpaper-sized images, the image preview would constantly "jump" to the foreground.  Sometimes, clicking on the tool option box (which appears after clicking an effect node) doesn't work.  I think the form in the top-right is stealing focus or something.  The options window doesn't appear to be movable, so this makes it really hard to use.  

Then there are little oddities like every item in the Input drop-down box being highlighted (???).

I also can't figure out a way to delete unneeded nodes.  I tried right-clicking, backspace/delete, and a whole bunch of other interactions.  No luck.

The help PDF did explain how to remove connecting lines, thankfully.  It would be very nice to be able to click anywhere on a line to access it, instead of just the ends (as the ends are close together and difficult to target).

Anyway, these kinds of little things can take a lot of energy to address, but in my experience, these little "papercut" issues can drive users crazy.  

*2) Performance*

To be honest, performance is pretty poor right now, especially if working on anything larger than about 0.5 megapixels.  The program is more or less unusable on photographs, unless maybe you leave it to run overnight.

But don't lose hope!  VB may be old, but we can coax a lot of performance out of it.  You just have to be willing to read a lot of research papers and brush up on all your math skills.   :Wink: 

Here are some quick comparison timings, using a 1920x1200 JPEG, and a single effect, applied to each RGB channel (so just three nodes: Input > Effect > Output).  I also tried to stop the timer before saving the image file, so only the effect is counted:

*Bilateral smoothing, radius 9, single iteration*
- Photo Modular (pure VB, I assume): 197.0 seconds
- PhotoDemon (pure VB, using Effects > Noise > Remove Noise which is really bilateral smoothing): 2.0 seconds
- GIMP (C, Blur > Selective Blur which is the closest thing they offer to bilateral smoothing): 3.0 seconds

I include PhotoDemon not because it's particularly good (PhotoShop is much faster, unfortunately), but to let you know that VB is still okay for tasks like this.  Bilateral smoothing seems like a particularly important tool to optimize in PMFX, because it is iterated multiple times (multipass) for some effects.

Next, let's look at something simple like *Gaussian Blur*.  Since it's an easier function, let's test a slightly larger radius (25 px):

- Photo Modular (pure VB, I assume): 128.0 seconds
- PhotoDemon (pure VB): 1.1 seconds (iterative box blur), 1.6 seconds (IIR), 3.2 seconds (true Gaussian)
- GIMP (C): 0.5 seconds (IIR or RLE, both are very fast)
- Paint.NET (C#): 1.5 seconds

I often use GIMP and Paint.NET as my benchmark, since they represent standard performance for free photo editors.  For PMFX to be in the neighborhood of those programs, it needs to be about 100x faster.  I don't think this is too hard (and maybe Cairo/vbRichClient can speed up functions even more), but it's difficult to give specific advice without knowing how you've implemented your features.  

Anyway, I know it is frustrating to hear things like "performance must be better," but don't lose hope.  Even small fixes can sometimes make huge improvements.  I also think better performance would make it easier for people to appreciate all the things your software can do.

If you'd like help or resources on any particular operation, let me know, and I'd be happy to go into more detail.

----------


## reexre

*ColinE66*




> I noticed that you ship a lot of bmps for the 'app loading' image.   ....


Sorry... I did not understand what do you mean ... (my English problem)

Maybe you refer about kernel creations at first Run... In this case Bmps are only for visual debug... not used in code. Code uses Brush...txt

----------


## ColinE66

I was referring to all the images named like 'A 0   M 0 of 40 size 11.bmp' that are in the Kernels folder. They appear to only be used for the 'visual effect' while the program is initialising.

----------


## reexre

*Tanner*

Thank you tanner!
I'm happy of your interest.

*1)Interface*




> For example, when working with wallpaper-sized images, the image preview would constantly "jump" to the foreground.


To me it do not result. it's foreground when mouse over it. When mouse is over "black board", it's background. When mouse is over Control Panel or Preview pic, it's foreground.
There's a strange behavior when moving mouse from "black board" to Preview pic...




> Sometimes, clicking on the tool option box (which appears after clicking an effect node) doesn't work


It's happens when (as above) moving mouse from "black board" to PreviewPic(Up).
This is very strange, I must solve it!




> Then there are little oddities like every item in the Input drop-down box being highlighted (???).


This is a ComboBox inside a usercontrol (same usercontrols are on black board - with different layout)
Thought was a problem of Style that is set as DropDownList... I tried to change other styles but nothing, always all highlighted.... Don't know why.... :-/





> I also can't figure out a way to delete unneeded nodes


Sorry this is still not implemented.... In fact I do not consider finished this project. I was hurry to make/test effects and Flows... so left back this function... that must be done.




> It would be very nice to be able to click anywhere on a line to access it, instead of just the ends


woooo!!! Go through points of a "catmull rom spline" .... no way ...
Even because it's drawn by cairo, not as my first mode that was done by drawing little short lines.
Even if I know that it would sure be really nicer. Don't know how to do! (and at the moment maybe there are first other improvements to do.... such as Delete BoxEffect)


Resuming...
...Solve background/foreground PreviewPic
...Create a Delete BoxEffect function
...Hilighted Combobox  (this is really strange...)



*2) Performance*

About performance, first thing I have to say is that Every Channel/Spline is a 2D dimension array of doubles that ranges from 0 to 1 (Obviously existing only when needed)



*Bilateral smoothing*

In my case, this maybe should be called Trilateral... 
If you notice, it's performed in 2 Passes.
First pass do a "FLOW"-filter with a number of smooth iterations equal to 0.618 * Bilateral Radius
Then it's performed a special Bilateral that takes into account the Pixel Angle Differences too.
Spatial Kernel is pre-Computed with a Gaussian function.
The smooth kernel instead of gaussian is Cubic. This is the function



```
Public Function CubicPulse2(X As Double, Center As Double, SideWide As Double, INVSideWide As 

Double) As Double
    Dim xx     As Double
    xx = X - Center
    If xx < 0 Then xx = -xx
    '----
    If xx >= SideWide Then CubicPulse2 = 0: Exit Function
    xx = xx * INVSideWide
    CubicPulse2 = 1 - xx * xx * (3 - 2 * xx)

End Function
```

Where X is the diffrenece from central pixel and kernel pixel in question, Center is 0, and SideWide is the "Smooth Parameter"

I think this is the function that slow down all... But maybe it's better than an EXP()

*BILATERAL* (+ Angles Diffrenece):



```

-For The numbers of iterations:

		-For all X Y Pixels.
                        
                        ValueSum=0
                        Divisor=0
                        ...

			-For all pixels of the Kernel  (Xp Yp for(s)):

			   VV = CubicPulse2(vIN(Xp, Yp) - Center, 0, Smooth, InvSmooth)
			   VV = VV * VV
			   VV = VV * SpaceKRNL(X - Xp, Y - Yp)
			   ddA = AngleDiff01(ANG(Xp, Yp), CenterA)
			   VV = VV * ddA                

			   ValueSum = ValueSum + vIN(Xp, Yp) * VV
			   Divisor = Divisor + VV
		
			-End Kernel


			If Divisor <> 0 Then
	   			Output(X, Y) = ValueSum / Divisor
   			Else
           			Output(X, Y) = vIN(X, Y)
   			End If

		-Next PIXEL

   		vIn=Output

-End Iterations
```

Maybe I'll remove angles Differences....

Don't Know how to speed up, maybe some LUT (lookup Tables.... )
I want to work with doubles.... not integers or bytes (0-255)




Gaussian Blur

I suppose my is TrueGaussian, ( 1 big Kernel initialized only 1 time ( like Bilateral) )



```
Public Type tKern
    V()        As Double  '2D array  (-r to r,-r to r)
End Type


With KERNELs(r)   ' as tKern

        For X = 0 To XT

            pXF = X - r
            If pXF < 0 Then pXF = 0
            pXT = X + r
            if pXT > XT Then pXT = XT
            
            For Y = 0 To YT

                pYF = Y - r
                If pYF < 0 Then pYF = 0
                pYT = Y + r
                If pYT > YT Then pYT = YT

                SUM = 0
                Divisor = 0
                For Xp = pXF To pXT
                    For Yp = pYF To pYT

                        K = .V(Xp - X, Yp - Y)

                        Divisor = Divisor + K

                        SUM = SUM + V1(Xp, Yp) * K

                    Next
                Next
                Output(X, Y) = SUM / Divisor
            Next

        Next

End With
```


That's all for now

----------


## reexre

*ColinE*

Sorry for my stupidity , I dont' know what is a pre-Loader 


> I have a nice pre-loader


That Pictures (BMPS) are useless be shown. (Could and should be hidden and not saved)
They are related to Brush(n).txt , that are created only at first run.
At second and further Runs only Brush(n).txt are loaded

----------


## reexre

*Olaf*

I took a quick look at cairo-widgets.
Questions:

1) is it possible to use them in a Picture instead of a Form ?
2) If not, do you think I'll have some problem to draw PreviewPicture and "ControlPanel" in the Form ?

----------


## ColinE66

> *ColinE*
> 
> Sorry for my stupidity , I dont' know what is a pre-Loader 
> 
> That Pictures (BMPS) are useless be shown. (Could and should be hidden and not saved)
> They are related to Brush(n).txt , that are created only at first run.
> At second and further Runs only Brush(n).txt are loaded



Aah, OK. I thought it was supposed to be something for the user to look at while the program loaded....

----------


## Tanner_H

> *Bilateral smoothing*
> 
> In my case, this maybe should be called Trilateral... 
> If you notice, it's performed in 2 Passes.
> First pass do a "FLOW"-filter with a number of smooth iterations equal to 0.618 * Bilateral Radius
> Then it's performed a special Bilateral that takes into account the Pixel Angle Differences too.
> Spatial Kernel is pre-Computed with a Gaussian function.
> The smooth kernel instead of gaussian is Cubic.


Okay, so even though you are using a modified bilateral function, there are still some things we can improve, particularly on the 2nd pass (which is the real problem at present).

First, I'd recommend taking a look at this paper:

Fast O(1) bilateral filtering using trigonometric range kernels

That can give you some ideas on how to improve the application of the spatial kernel, and the ideas could possibly be extended to the cubic kernel as well. 

It's also possible to convert the bilateral filter to a separable implementation (which is what I do in my implementation).  Here is a link to that paper:

Separable bilateral filtering for fast video preprocessing 

In your case, it is not floating-point math that slows things down (modern processors are extremely efficient at floating-point math).  External function calls are also not much of a problem.  Your biggest problem is nested loops.  There are very few times when loops need to be nested 4 deep.  In almost all cases, we can use various mathematical tricks and identities to reduce loops to 3- or even 2-nested (just x and y).




> Gaussian Blur
> 
> I suppose my is TrueGaussian, ( 1 big Kernel initialized only 1 time ( like Bilateral) )


Your current implementation of a gaussian blur uses nested loops again, which is a big "no-no."  Gaussian blurs are separable (meaning you can process a 1D kernel in the horizontal direction, then a 1D kernel in the vertical direction, and get an identical result to a 2D kernel).

A separable implementation is P * Q / (P + Q) faster than a 2D kernel implementation, where P and Q are the width and height of the kernel.  So for a 9x9 kernel, the separable implementation is 4.5x faster.  For a 99x99 kernel, the separable implementation is 50x faster.

You can see a nice discussion of the underlying math here.  My separable Gaussian implementation is here as the CreateGaussianBlurDIB function, if you are curious.

This is a really easy change to make, and the output is literally identical to a 2D kernel - just much, much faster.

If you want to improve performance even more, an Infinite Impulse Response Gaussian Blur implementation is not very difficult, and it works very well on floating-point data.  IIR has a number of advantages: it supports floating-point kernel sizes (e.g. 2.5 pixels).  It performs an in-place blur, so you don't need a temporary copy of the data.  You can iterate multiple times to approach a true Gaussian, or you can iterate just 1x or 2x for a faster approximation.

And of course, it's very fast.  GIMP uses this algorithm to great effect.  Intel has a nice paper on the algorithm too, if you're curious about the math.

Anyway, the code for an IIR implementation is quite simple.  Here's my implementation, as the GaussianBlur_IIRImplementation function.  I developed it with help from this paper:

A Survey of Gaussian Convolution Algorithms

I've found that it really pays to study as many research papers as you can on a given algorithm.  Many times, other coders have found clever ways to optimize functions, and it's usually not difficult to translate their work into VB.  In many cases, these simple optimizations can provide 1 or even 2 orders of magnitude better performance than a naive implementation.

As VB coders who don't have access to all the niceties of a modern compiler, I guess we have to focus on "coding smarter, not harder."   :Wink: 

Hope this helps.

----------


## reexre

Thank you very much *Tanner* !

for now a simple separable Blur, so much faster!!!




```
'Separable

    Dim tmpK() As Double
    ReDim tmpK(-r To r)

    SUM = 0
    For X = -r To r
        tmpK(X) = Exp(-(X * InvR) ^ 2 * 4)
        SUM = SUM + tmpK(X)
    Next
    
    'Normalize
    SUM = 1 / SUM
    For X = -r To r
        tmpK(X) = tmpK(X) * SUM
    Next
    

       'Do by X
    For X = 0 To W
        pXF = X - r
        If pXF < 0 Then pXF = 0
        pXT = X + r
        If pXT > W Then pXT = W
        For Y = 0 To H
            SUM = 0
            Divisor = 0
            For Xp = pXF To pXT
                K = tmpK(X - Xp)
                'Divisor = Divisor + K
                SUM = SUM + V1(Xp, Y) * K
            Next

            BLUR(X, Y) = SUM    '/ Divisor

        Next

        If X Mod 40 = 0 Then SETprogress X / W * 50

    Next


    '
    'Do by y
    For Y = 0 To H
        pYF = Y - r
        If pYF < 0 Then pYF = 0
        pYT = Y + r
        If pYT > H Then pYT = H
        For X = 0 To W
            SUM = 0
            Divisor = 0
            For Yp = pYF To pYT
                K = tmpK(Y - Yp)
                'Divisor = Divisor + K
                SUM = SUM + BLUR(X, Yp) * K
            Next

            oV1(X, Y) = SUM    '/ Divisor

        Next
        If Y Mod 40 = 0 Then SETprogress Y / H * 50 + 50
    Next

    SETprogress 100
```



I'll study your suggestions in these days

Made it portable
I'll update the link in few minutes [*version must be 0.0.758  ( or above )* ]

----------


## Tanner_H

> Thank you very much *Tanner* !  for now a simple separable Blur, so much faster!!!


You're very welcome.  Congratulations on fixing it so quickly!

FYI, I think you might get more testers if you put the download link at the very top, before the sample images.  It would also be helpful to display the current version number, and possibly a change log so others can know what to test since the previous version.

----------


## reexre

Hi

I think that for me, at moment, about BLUR, is enough my separable gaussian, without going to faster/complexer algorithms.

I've implemented separable Bilateral too, and I applied separable Gaussian Blur of USM (unsharp Mask), so it's faster.

Most interesting algorithms (in my case) are the ones that use diffrent kernel Radius in the same picture.

I tried to implement my ToneMapping algorithm (Variable R) [Super Slow] in a separable way, but I did not succed, as said, due to the diffrenet kernel Radius used in the same Picture.

I wander if there's a technique to perform this kind of "separablity" 


*Tanner*

I have a question about Gaussian.
Which is the best sigma to use for a given Radius? or better, which is the best Sigma to use for a radius = to 1 ?
I use the formula 

G = EXP (-((x/R)^2*K)). 

where K is 1/(2*Sigma^2)  ( if I'm correct ).

For semplification I use K instead of Sigma.    [ Sigma = Sqr(1/(2*K))  ]

So, Dividing X/R, any radius is used, Gaussian has the same Sigma (K).

Which is the best sigma to use for a Radius of 1 ?


About *Interface*, I'm unsure how to proceed... To one way, I'd like to implement a nicer layout using RichClient widgets, that, I think it will be an intensive work, and, by the other side, I would implement the node (fx) eraser, that is not so simple, and will be very different to make if RichClient-Widgets are used....
And Then I have even the other issues to solve...

----------


## reexre

> I noticed a lot of strange issues with the interface.  For example, when working with wallpaper-sized images, the image preview would constantly "jump" to the foreground.  Sometimes, clicking on the tool option box (which appears after clicking an effect node) doesn't work.  I think the form in the top-right is stealing focus or something.


*Fixed* 
The cause was RichTip trying to Draw itself outside the screen.

I'll update the "download" soon (above 0.0.815)

----------


## Tanner_H

> Most interesting algorithms (in my case) are the ones that use diffrent kernel Radius in the same picture.
> 
> I tried to implement my ToneMapping algorithm (Variable R) [Super Slow] in a separable way, but I did not succed, as said, due to the diffrenet kernel Radius used in the same Picture.
> 
> I wander if there's a technique to perform this kind of "separablity"


Unfortunately, not all kernels are separable.  To be separable, a kernel must be able to be represented as a product of two one-dimensional kernels.  Some software (MatLab) can solve this for you, but to do it yourself is very complicated.  I don't think you could programmatically solve it many times, with different radii, without making the program even slower!

I think the only well-known separable kernels are box blur, Gaussian blur, and some edge detection filters (http://en.wikipedia.org/wiki/Separable_filter).  But these all require a fixed R value for a single run.

Filters with variable length use different optimizations techniques.  

The first common optimization is to re-use as much data as possible from past pixels.  So something like a "sliding window" approach would start with the calculations of the previous pixel, then add/subtract only what is necessary to modify for the current pixel.  I use this technique for a median filter, for example, and it is much faster than a naive approach.  (However, the code is unpleasantly complicated).  

The second common optimization is to precalculate images processed with several radius values (for example, small, medium, and large radii), then interpolate between those for a given pixel.

So for example, if you are doing different blur amounts to every pixel, you could calculate Gaussian blurs of 1, 10, and 25 pixels.  If you had a pixel that needed Gaussian of 12, you would calculate a weighted average between the pixel's result at 10 and at 25.

What's neat about this optimization is once you precalculate the blurs, when the user changes the blur amount, you can render the result in real-time because it's very fast to calculate weighted averages.  However, it takes some testing to figure out how many precalculated radii you need to get good interpolation results.




> I have a question about Gaussian.
> Which is the best sigma to use for a given Radius? or better, which is the best Sigma to use for a radius = to 1 ?
> I use the formula 
> 
> G = EXP (-((x/R)^2*K)). 
> 
> where K is 1/(2*Sigma^2)  ( if I'm correct ).
> 
> For semplification I use K instead of Sigma.    [ Sigma = Sqr(1/(2*K))  ]
> ...


The best sigma is tricky, because it depends on your goal.  There are a few different ways that sigma and radius are related.

First, at the simplest level, a given K value typically requires a certain R value for it to produce good results.  The general formula is R must equal at least 6σ-1 values.  So for a σ of 5, you need an R of at least 29.

You can solve this simple equation for σ, to get σ = (R + 1) / 6

Because very low sigma values result in changes that are difficult for users to see, more complicated formulas are often used.  Also, for image data, different Gaussian shapes produce more aesthetically pleasing results.  Personally, I very much like the formula used by GIMP:

stdDev = Sqr(-(Radius * Radius) / (2 * Log(1# / 255#)))

Then to populate the kernel, if your kernel array is size [-radius, radius] you construct it like this:

kernel[i] = (1 / (Sqr(PI_DOUBLE) * stdDev)) * (EULER ^ (-1 * ((i * i) / (2 * stdDev2))))

I'm honestly not sure how GIMP arrived at this formula, but it produces very nice results and works well at all radii (even floating-point ones).

If you're curious, this StackOverflow link has a really nice chart that shows how different sigma values create different Gaussian shapes: 

http://stackoverflow.com/questions/2...ma-for-that-ga




> About *Interface*, I'm unsure how to proceed... To one way, I'd like to implement a nicer layout using RichClient widgets, that, I think it will be an intensive work, and, by the other side, I would implement the node (fx) eraser, that is not so simple, and will be very different to make if RichClient-Widgets are used....
> And Then I have even the other issues to solve...


This is just my $0.02, but have you considered not using widgets at all, but simply drawing all interface elements at run-time onto a single large picture box?  In many cases, I prefer this approach over creating and deleting many controls at run-time.  It allows for smoother animation, it's much lighter on resources, and it makes creating/deleting things very simple.  (But maybe it would be too much work, I don't know.)

----------


## reexre

removed by me

----------


## ColinE66

> *Fixed* 
> The cause was RichTip trying to Draw itself outside the screen.



Hi reexre, if you have found a bug with RichTip, can you please post details of how to reproduce in the RichTip thread. Thanks...

----------


## reexre

> Hi reexre, if you have found a bug with RichTip, can you please post details of how to reproduce in the RichTip thread. Thanks...


Create a RichTip for a picturebox on MouseMove. Make its to the Right of the picture.

Now, if the picture is bigger (width) than screen... there was the error

----------


## reexre

I'm developing vbRichClient Interface 

*[DOWNLOAD] interface V0.1 source code*

The point is that I had to draw Splines in the same canvas where CairoControls are drawn ( a picturebox )

The problem is that there's a strange flickering... I want to eliminate.

Some Code:

The Picture must be resizeable, so at Form_Resize:
(where Public vbDR As cVBDraw already initialized)


```
    vbDR.ReleaseBinding

    frmMain.PIC.Width = newW
    frmMain.PIC.Height = newH

    Set vbDR = Nothing
    Set vbDR = Cairo.CreateVBDrawingObject
    Set vbDR.Srf = Cairo.CreateSurface(frmMain.PIC.Width, frmMain.PIC.Height, ImageSurface)       'size of our 

rendering-area in Pixels
    Set vbDR.CC = vbDR.Srf.CreateContext    'create a Drawing-Context from the PixelSurface above

    vbDR.BindTo frmMain.PIC
```

After Drawing Lines with vbDR.cc....MoveTo, LineTo, Stroke
Look at Sub *DrawLinks*



```
   
   vbDR.Srf.DrawToDC frmMain.PIC.hDC
   frmMain.PIC.Refresh
```


Hope for a big help by Olaf   :Wink:

----------


## ColinE66

> Create a RichTip for a picturebox on MouseMove. Make its to the Right of the picture.
> 
> Now, if the picture is bigger (width) than screen... there was the error


Thanks - I'll look into it....

----------


## Schmidt

> Hope for a big help by Olaf


Well, have taken a look - and considering your GUI-structure (not that many controls, 
just complex drawing) - I'd *strongly* suggest to do an "all out Widget-based version" 
(instead of the "workaround" with the VB-Usercontrols).

See, the cVBDraw-Class is mainly thought, to draw directly onto the BackBuffer-Surface 
on a cWidgetForm with (then antialiased working) "classic VB-Drawing-Commands" (as Line and Circle).

The PictureBox-Binding-Mode you currently use it with, was not thought to act as a 
"Control-Container for Windowless-UserControls on top" - I've implemented it mainly for 
PDF-PrintPreviews ... (still suprised, that it works at all, though only to a degree - as you discovered).

Please take a good look at the Demo I posted here:
http://www.vbforums.com/showthread.p...r-Connections)



This is far less code than what you currently have, flickerfree and in a good performance,
Hovered-Highlighting supported above ConnectionPoints, as well as over the Bezier-Curves.

And your current Panel (based on a PicBox currently) you could easily implement with 
a "sliding-in-panel" which is fully Alpha-aware, when you'd use a cWidgetForm instead 
of your current Picture-Box.

The Widget-Engine might have a bit of a learning-curve - but when you consider the time you 
invested over the last days (for the VB-UserControl-based solution) - if you invest half 
of that into learning how to use the Widget-Engine, you'd be all set and ready, to proceed 
at a much higher speed (oh, and did I mention, that Zooming comes basically "for free"?  :Wink: ).

As for Controls, there's a nice set already implemented in vbWidgets.dll (Download-Link
is on vbRichClient.com) - but implementing your own is also not that difficult - their 
internal Code is matching roughly with the philosophy I used with the VB-UserControl-Alpha-Demo,
it's just that you have much more powerful Events internally (compared to what's available 
in a VB-Usercontrol).

Here's the Code for a (very) simplified Button-Widget, which is not dependent on the cwButton-Class
of the vbWidgets.dll-Project, but using only the Theming-Engine which is already in the BaseDlls of the RC5:



```
Option Explicit

'************ default-conventions, needed in any cwWidget-Class ************
Private WithEvents W As cWidgetBase
 
Private Sub Class_Initialize()
  Set W = Cairo.WidgetBase
End Sub

Public Property Get Widget() As cWidgetBase: Set Widget = W: End Property
Public Property Get Widgets() As cWidgets: Set Widgets = W.Widgets: End Property
'**************** end of default-conventions for cwClasses ****************

Private Sub W_MouseDown(Button As Integer, Shift As Integer, ByVal X As Single, ByVal y As Single)
  W.Refresh
End Sub
Private Sub W_MouseEnter(ByVal MouseLeaveWidget As vbRichClient5.cWidgetBase)
  W.Refresh
End Sub
Private Sub W_MouseLeave(ByVal MouseEnterWidget As vbRichClient5.cWidgetBase)
  W.Refresh
End Sub

Private Sub W_Paint(CC As vbRichClient5.cCairoContext, ByVal xAbs As Single, ByVal yAbs As Single, ByVal dx_Aligned As Single, ByVal dy_Aligned As Single, UserObj As Object)
Dim State As Long
  State = IIf(W.Root.MouseKeyDown And W.MouseOver, 1, 0) Or IIf(W.MouseOver, 2, 0)
  W.Root.Cairo.Theme.DrawTo CC, W, thmTypeButtonFace, State, 0, 0, dx_Aligned, dy_Aligned, 2
  CC.SetLineWidth 1
  W.Root.Cairo.Theme.DrawTo CC, W, thmTypeBorder, State, 0, 0, dx_Aligned, dy_Aligned, 2
  W.SelectFontSettingsInto CC
  CC.DrawText 1, 1, dx_Aligned, dy_Aligned, W.Key, , vbCenter, 2, True
End Sub
```

Really not much to code, to make your own fully alpha-aware Controls, which in conjunction
with the cWidgetForms will work flickerfree.

Olaf

----------


## reexre

*AWESOME!*

But ... I just found something that stops me ..  :Frown: 

-I Put to all Classes the RegFreeDll, and work, no problem.

-Then I tried to delete a connection with RightClick (works!):



```
on class cPin
Public Sub UnConnect()
Me.TargetKey = ""
End Sub

on Class wcCanvas
Private Sub W_MouseDown(Button As Integer, Shift As Integer, ByVal X As Single, ByVal y As Single)
    If Button = 2 Then
        If ActivePin Is Nothing Then
        Else
            Me.ActivePin.UnConnect
        End If
    End If
End Sub
```

Now I have the problem that the type of connections for my program can have the same pin as "PinFrom" (and not the same as "PinTo") [Same NodeOutPin can have multiple "ConnectTo"s]
( maybe I should make an array of "TargetParentKey" ... but should change someway even "ActivePin" ...seems to me a brain teaser...)

I'll try the way not to use cPin, in a way similar to my previous post ("encapsulating" them in Nodes)
and managing the connections in a separate way... maybe a classConnection ?

Now I am unsure... I still have to learn more about widgets.


Further I'll try to draw the Panel-PictureBox or other standard components (comboBox, Buttons ) on widget-from.

----------


## reexre

Pure *Interface*

Here's my result  

*[DOWNLOAD] interface V0.2 Source Code*


 :Smilie:   Now it's possible to   
-Delete Nodes (right Click)
-Delete Connections (Right Click on it)
-(most difficult)  Add New Connections (Drag the Output Pin to the Input Pin)

(However the code is pretty messy and with some junk)


So, now , where to start from to Add  Panel, PictureBox (to display elaboration Preview) and other objects such as combobox ?

----------


## reexre

*GOOD NEWS!*  :wave: 

It has been an hard challenge but At Least ... after an hard work, I succeded to implement the vbRichClient-Interface 
!!!   :big yellow: 

There's still some improvement to do and ... 
at the moment , only few "node-fx" have customizable settings. (Very boring adding all vbWidgets for each Node-Fx-Type Settings)


Go to 1st Post of this thread to download Last Version
( Old interface still available )

Enjoy !


Question :

* How to Animate a small Draw (like a Polygon) when a Node is working ? (look standard Interface - the "Red Star")
  I tried to do it adding a cTimer inside the Node, and Enabling it only when Node is busy. But I do not succeeded

----------


## Schmidt

> It has been an hard challenge but At Least ... after an hard work, I succeded to implement the vbRichClient-Interface


Well, took you "3 full days" or so (spread over a week)  - and that's not bad for incorporating 
and understanding a so far not used, new approach to "nice and powerful GUI-stuff".

And yes - in the beginning this might "hurt" a bit - but please note, that you never
really got stuck anywhere. 

With normal VB-GUI-programming you often come to a point, where "the control just 
doesn't, or cannot do what I want" - or you have to resort to SubClassing or other stuff,
just to accomplish some things, which are out of the norm.

With the Widget-Engine there's no such "hurdles to jump over" or points where you might
get stuck. Besides from learning how the engine works - and what Cairo-Drawing-commands 
to use, you will always be able to "keep moving". The amount of work for "simple things" might
be a bit higher - but the more complex things can be tackled "straight, by just working on it" 
(without resorting to Hacks or SubClassing).




> There's still some improvement to do and ... 
> at the moment , only few "node-fx" have customizable settings. (Very boring adding all vbWidgets for each Node-Fx-Type Settings)


I'd tackle that in the way the VB-IDE is working as well - developing a PropertyGrid-Widget,
which in the left column shows the Property-Names (your Parameters) - and in the right 
Column shows the Value (depending on the Value-Type, switching between TextBox, Combo or CheckBox).

If you encapsulate your Imaging-Algorithms in your own Dll (each Algo residing in its own Class - 
and this Class simply having a List of Public Properties for your Parameters), then the filling
of such a Property-Grid-Widget would become quite simple, by just using the Classes
cProperties and cProperty from the RC5 (enumerting the Props, their Names and Values, 
and also the Value-Type is included, as well as Enum-Members in case of an Enum-Type
(to be able to fill a small Combo for the Enum-Values, the same way the VB-IDE does).




> Question :
> 
> * How to Animate a small Draw (like a Polygon) when a Node is working ? (look standard Interface - the "Red Star")
>   I tried to do it adding a cTimer inside the Node, and Enabling it only when Node is busy. But I do not succeeded


jpbro has already implemented such "spinning-animations" stuff quite thoroughly here:
http://www.vbforums.com/showthread.p...-vbRichClient5

Should be quite easy, to "steal ideas" from his contribution (or using it in its encapsulated form).

Olaf

----------


## reexre

About *vbWidgets*:

*1)* where should I put the vbWidgets.DLL ? (I put it in App.Path)

I have AppPath\vbRC5BaseDlls containing the RichClient DLLs


*2)* is it correct (to make it RegFree) my change on vbWidgets SubMain ?:



```
Declare Function GetInstanceEx Lib "DirectCOM" (StrPtr_FName As Long, StrPtr_ClassName As Long, ByVal 

UseAlteredSearchPath As Boolean) As Object
Public New_c As cConstructor, Cairo As cCairo

Public Sub Main()

'' ORIGINAL
''
'  On Error Resume Next
'   Set New_c = GetInstanceEx(StrPtr(App.Path & "\vbRichClient5.dll"), StrPtr("cConstructor"), True)
'
'  If New_c Is Nothing Then
'    Err.Clear
'    Set New_c = New cConstructor
'  End If
'
'  Set Cairo = New_c.Cairo
'
'  Set Cairo.Theme = New cThemeWin7
''  Cairo.FontOptions = CAIRO_ANTIALIAS_DEFAULT


'''''''''''''''''''''''''''''''''''''''''''''' MY way
  Set New_c = GetInstanceFromBinFolder("vbRichClient5", "cConstructor", "vbRC5BaseDlls")
  Set Cairo = New_c.Cairo
  Set Cairo.Theme = New cThemeWin7

'-------------------------------------------
End Sub
```


*3)* Where can I find Other Branches of vbWidgets ?

*4*



> With the Widget-Engine there's no such "hurdles to jump over" or points where you might get stuck.


Not so easy, I succeded on changing a little bit the cwFileList 
so that when a Key is pressed, it set its position to the first item that start with pressedKey-character.
(quite like VB-Control)


*5)*  How to set the Zorder of widgets ?
ah, ok, they seem to follow the "Form.Widgets.Add(" creation order.
At the moment I do not need to change it at Runtime.


*6)*  PropertyGrid-Widget




> I'd tackle that in the way the VB-IDE is working as well - developing a PropertyGrid-Widget, which in the left column shows the Property-Names (your Parameters) - and in the right Column shows the Value (depending on the Value-Type, switching between TextBox, Combo or CheckBox).


Sounds really what I need...



> If you encapsulate your Imaging-Algorithms in your own Dll (each Algo residing in its own Class - and this Class simply having a List of Public Properties for your Parameters), then the filling of such a Property-Grid-Widget would become quite simple, by just using the Classes cProperties and cProperty from the RC5 (enumerting the Props, their Names and Values, and also the Value-Type is included, as well as Enum-Members in case of an Enum-Type (to be able to fill a small Combo for the Enum-Values, the same way the VB-IDE does).


Seems so easy, but not to me...
Even just only Implementing the PropertyGrid-Widget is an hard challenge for me.
Does standard cwGrid implement "right Column shows the Value (depending on the Value-Type, switching between TextBox, Combo or CheckBox)." ???    [I need HscrollBar too]

In the PropertyGrid-Widget should appear only the properties of Selected Node
-When a Node is Clicked Public-PARAMS-UDT-variable values should be "transfered" to the Grid (and diplay only them)
-When user tweaks properties on GRID they should be transfered to the Public-PARAMS....

I'm thinking about an easyer way...

----------


## Schmidt

> About *vbWidgets*:
> *1)* where should I put the vbWidgets.DLL ? (I put it in App.Path)
> I have AppPath\vbRC5BaseDlls containing the RichClient DLLs


Always put it beside vbRichClient5.dll for regfree deployment, so this is correct.




> *2)* is it correct (to make it RegFree) my change on vbWidgets SubMain ?:


No, what's already there inside Sub Main was correct - and ensures that 
the vbWidgets.dll can use *other classes from the RC5 regfree internally*.

In your case, you want to create instances of Classes regfree, which vbWidgets.dll
*exports* on its outside interface (all of the cwWidget-Thingys).

And so, this case has to be handled within your App, not in vbWidgets.dll.

I've seen, that you re-create a New_c (along with a Cairo) regfree in each and 
every Class in your StdExe-Project. That is *not* necessary.
When New_c and Cairo are defined Public in a *.bas Module, then they are
automatically "visible" and usable in each and every code-snippet in your
entire Project, so they have to be created Regfree only *once* (in Sub Main()).

Now, to create Widget-Classes regfree from within your Std-Exe-Project,
I usually write a small function for that ....(Public, and placed in the same 
Code-Module (besides Sub Main()):



```
Public Function NewWidget(ClassName As String) As Object
  If App.Logmode Then 'we run compiled
     Set NewWidget = New_c.RegFree.GetInstanceEx(App.Path & "\vbRC5BaseDlls\vbWidgets.dll", ClassName)
  Else 'we run in the IDE, so we create the instance from the registered version
     Set NewWidget = CreateObject("vbWidgets." & ClassName)
  End If
End FUnction
```




> *3)* Where can I find Other Branches of vbWidgets ?


The one on GitHub is the one to use, if you have useful enhancements which 
you think should be placed in the Master-Branch there, post them to me, 
or make a Git-Pull-Request.




> *4*
> Not so easy, I succeded on changing a little bit the cwFileList 
> so that when a Key is pressed, it set its position to the first item that start with pressedKey-character.
> (quite like VB-Control)


That would be a change you could mail me, so that I can update the GitHub-Repo.




> *5)*  How to set the Zorder of widgets ?
> ah, ok, they seem to follow the "Form.Widgets.Add(" creation order.
> At the moment I do not need to change it at Runtime.


IIRC there should be already a "MoveToFront"-Method in cWidgetBase.




> *6)*  PropertyGrid-Widget
> 
> Seems so easy, but not to me...
> Even just only Implementing the PropertyGrid-Widget is an hard challenge for me.
> Does standard cwGrid implement "right Column shows the Value (depending on the Value-Type, switching between TextBox, Combo or CheckBox)." ???    [I need HscrollBar too]
> 
> In the PropertyGrid-Widget should appear only the properties of Selected Node
> -When a Node is Clicked Public-PARAMS-UDT-variable values should be "transfered" to the Grid (and diplay only them)
> -When user tweaks properties on GRID they should be transfered to the Public-PARAMS....
> ...


First thing to make it easy should be, to transfer all your Imaging-Algos into a Dll-Project -
wrapping each of the Algos in its own Class (with all its Parameters as Public Properties).

Example for an RGB-Color-Inversion-Algo:



```
Option Explicit

'the Properties are free definable, and can be enumerated completely with the RC5.cProperties-Enumerator later on
Public OnRedChannel As Boolean 
Public OnGreenChannel As Boolean 
Public OnBlueChannel As Boolean 

Private Sub Class_Initialize() 'set Default-Values
  OnRedChannel = True
  OnGreenChannel = True
  OnBlueChannel = True
End Sub

'Now, two generic (unchanging) Public Methods, each Class has to implement in the same signature

'one for Pixels, to process in a Surface-Container
Public Sub PerformOnSurface(Src As cCairoSurface, Dst As cCairoSurface)
   If OnRedChannel Then 'perform your Inversion Loop on the Red-Bytes of Src

   End If
   
   If OnGreenChannel Then ... a.s.o.
End Sub

'and one for your Double-Precision-Arrays
Public Sub PerformOnDoubleArrays(SrcR() As Double, SrcG() As Double, SrcB() As Double)
   If OnRedChannel Then 'perform your Loop on SrcR

   End If
   
   If OnGreenChannel Then ... a.s.o.
End Sub

'Maybe two additional Properties should be defined in such a default-interface on each of those Classes
Public Property Get SupportsSurfaces() As Boolean

End Property
Public Property Get SupportsDoubleArrays() As Boolean

End Property
```

With such a generic usable Dll-Class-definition (which later on would even allow People
to contribute "Plugins"), you should be able to cover most of what you currently have.

I mean, why not "doing it right from the get-go", since you're currently in a re-design-
phase anyways...

Remember, that you can easily load such an "Algo-Class-Definition" from your Dll
regfree later on (quite similar to what you do with vbWidgets.dll-Classes) - and you could 
run them in the IDE (whilst developing your surrounding GUI-Project) *native-compiled* 
in full-speed (from the compiled Dll).

I know that such "architectural-considerations" are sometimes "hurtful for the creative mind"
(which doesn't want to get bothered with such "unimportant details")  :Wink:  - but once you have it 
in place, you will thank yourself later on, when the project evolves.


Olaf

----------


## reexre

on VList I put an event on W_KeyUp Event


```
RaiseEvent KeyPressedMy(KeyCode)
W.RaiseBubblingEvent Me, "KeyPressedMy", KeyCode
```

[W.RaiseBubblingEvent] I don't know what is this , I just copy from other places.

And On cwFileList


```
Private Sub VList_KeyPressedMy(wK As Integer)
'REEXRE

    Dim J      As Long

    For J = 0 To VList.ListCount - 1
        If UCase(Left$(mDirList.FileName(J), 1)) >= Chr$(wK) Then: Exit For
    Next

    If J <> 0 Then
        VList.ListIndex = J
        VList.Selected(J) = True
    End If

    VList.Widget.Refresh
    W.Refresh

End Sub
```



*Widget Creation:*



```
Private WithEvents cmdSave As vbWidgets.cwButton
Set cmdSave = Me.Widgets.Add(New vbWidgets.cwButton, "cmdSave", 325, 20, 65, 60)
```

where ME is another (parent)widgets (or fMain.Form )
is wrong ? (seems to work)

* fx DLL* 

Not so difficult to Create a DLL with all the FXs in separate Classes.
Not so clear point to me is creating the ProgressBar Events that each class will fires.

MIX2 class example:


```
Option Explicit

Public Event SetProgress(V As Long, Str As String)

Public MixMode As Long
Public Value100 As Double



Private Sub Class_Initialize()
    Value100 = 50
    MixMode = 0
End Sub


Public Sub RUN(V1() As Double, V2() As Double, OUT() As Double)
    Dim X      As Long
    Dim Y      As Long
    Dim XT     As Long
    Dim YT     As Long
    Dim P      As Double

    XT = UBound(V1, 1)
    YT = UBound(V1, 2)
    ReDim OUT(XT, YT)

    MixMode = MixMode    ' MAINparams(caller).P(1)
    P = Value100 * 0.01    'MAINparams(caller).P(2) * 0.01

    RaiseEvent SetProgress(0, "")

    Select Case MixMode
    Case 0    'AVG
        For X = 0 To XT
            For Y = 0 To YT
                OUT(X, Y) = V1(X, Y) * (1 - P) + V2(X, Y) * P
            Next
        Next
    Case 1  'MUL
        For X = 0 To XT
            For Y = 0 To YT
                OUT(X, Y) = V1(X, Y) * V2(X, Y)
            Next
        Next

    Case 2  'SUM
        For X = 0 To XT
            For Y = 0 To YT
                OUT(X, Y) = V1(X, Y) + V2(X, Y)
                If OUT(X, Y) > 1 Then OUT(X, Y) = 1
            Next
        Next
    Case 3  'DIFF
        For X = 0 To XT
            For Y = 0 To YT
                OUT(X, Y) = V1(X, Y) - V2(X, Y)
            Next
        Next

    Case 4    'GREATER
        For X = 0 To XT
            For Y = 0 To YT
                If V1(X, Y) > V2(X, Y) Then
                    OUT(X, Y) = V1(X, Y)
                Else
                    OUT(X, Y) = V2(X, Y)
                End If
            Next
        Next

    Case 5    'SMALLER
        For X = 0 To XT
            For Y = 0 To YT
                If V1(X, Y) < V2(X, Y) Then
                    OUT(X, Y) = V1(X, Y)
                Else
                    OUT(X, Y) = V2(X, Y)
                End If
            Next
        Next

    End Select


    RaiseEvent SetProgress(100, "")

End Sub
```

- In Main Project it is not possible to declare the Events of Dll-Classes in a Module
(Private withevents MyDLL.ClassName)
So I must declare all the Effects (whole DLL) in a New (MainProject) Class.

And this New MainProject (all-fx in DLL) Class will have:



```
Public WithEvents FX01 As PhotoFX.SetOutput
Public WithEvents fxMIX2 As PhotoFX.MIX2
Private Sub Class_Initialize()
   Set FX01 = New PhotoFX.SetOutput
   Set fxMIX2 = New PhotoFX.MIX2
End Sub
```

For each effect.
...
..Anyway this works ...



I'm going to make all the effects in a single DLL.

 - I never made a distributable (without Installer) project that contains my own DLLs
So, Should I make it regFree ? , how to do it?

 - this way all the algorithms will be usable by anyone in another project ... (not so good)


*cwGRID*

How to do it?
I'm sure I cant make it myself.

-First, it must display only property of selected Node-fx.

Left Column Property Name, Right Column the widget, that can be 
cwText
cwButton-checkbox
cwDropDownList
cwHscrollBar.

-I think the right column-widgets should have the ability to RaiseEvents too, so when user changes their values, the MAINParams(whichNode).Parameter(CurrentParameter) values are updated.
[The Project-Flow can have the same NodeFxType many times in different Nodes]

-How should it recognize the Type of widgets to display ? since on fx-DLLs most fx-properties are simply numerical (long) 
[For example how  would it know if it is a cwText or a cwHscrollbar ? ]

-Some of the Row of the cwGRID should be hidden depending on another Row value. [not a must]
(for example in MIX2 , If cwDropDownlist is "AVG" a cwHScroll should be visible, but in other cases (SUM,SUB,...) the cwHScroll should be hidden (because useless)


...I'm feeling "complexity" is increasing too much  :Wink:

----------


## Schmidt

> on VList I put an event on W_KeyUp Event


I've implemented your suggestion in cwFileList now.

Please wait a few days for a new release of vbWidgets 
(since I also implement a cwPropertyGrid currently, which I need for a Form-Designer anyways).




> [W.RaiseBubblingEvent] I don't know what is this , I just copy from other places.


A normally raised VB-Event will only be *directly* received by the class which 
hosts that Widget (withEvents) - whilst the Bubbling-events move through
each and every Parent (up to the hosting WidgetForm) and can be received 
there too...(which allows for a whole lot of easy to implement scenarios - 
e.g. something like "Control-Arrays" are not necessary anymore, since with 
the Bubbling-Events the Parent will receive any Event from any Child-Widget
anyways).




> *Widget Creation:*
> 
> 
> 
> ```
> Private WithEvents cmdSave As vbWidgets.cwButton
> Set cmdSave = Me.Widgets.Add(New vbWidgets.cwButton, "cmdSave", 325, 20, 65, 60)
> ```
> 
> ...


Any Object which supports a "Widgets" Property can host other ChildWidgets - 
the approach is entirely hierarchic and even the simplest little cwLabel can 
act as a Container for other Widgets.




> * fx DLL* 
> 
> Not so difficult to Create a DLL with all the FXs in separate Classes.
> Not so clear point to me is creating the ProgressBar Events that each class will fires.


Introduce an additional Parameter (of Type IProgressEvent) - this way
the caller of your "heavy Functions" can pass its own Object-Instance
into the called Method (per Me) - the only necessity is, that the caller
in question (e.g. your cfForm-Class, or a Container-WIdget), implements
IProgressEvent (with VBs Implements-Keyword)

IProgressEvent itself can be defined in a small (Public) VB-Class, 
which contains only the Method-Signature - as e.g.:


```
Public Sub Progress(Byval Percentage As Double, Sender As Object)
End Sub
```

This callback-scheme is quite a lot faster than normal VB-Events.





> I'm going to make all the effects in a single DLL.
> 
>  - I never made a distributable (without Installer) project that contains my own DLLs
> So, Should I make it regFree ? , how to do it?


In the same way (over a small function, as seen in one of my last posts) which shows,
 how you should instantiate Classes from vbWidgets.dll (per ClassName-String-Param).




> - this way all the algorithms will be usable by anyone in another project ... (not so good)


This is solvable with ease, since any Plugin-Dll (also those from other authors),
will need (besides the Algo-Classes) a central "Main-Class" (e.g. named cMain),
which will provide (also over a "normed Interface") methods like:



```
Public Function GetAvailableAlgorithmClassNames() As Collection
End Function

'and for those who want to make the usage dependent on a Password or Key,
'there's the cCrypt-Class which allows e.g. for CRAM-MD5 or CRAM-SHA1 
'challenge-response Authentication, and the result of that could be stored 
'in a Dll-Global *.bas-Module-variable, which on Procedure-Entry of all the 
'FX-Functions would be visible - and would allow an "early exit" (doing nothing,
'in case there was no successful authentication)
```

So that's elegantly solvable over such a cMain-Class, which you will need anyways
(e.g. when a routine is parsing the "Plugins-Directory" for available Dlls, the 
cMain-class could be easily instantiated regfree - and calling its Method:
GetAvailableAlgorithmClassNames would then allow you a Listing for each 
of the found Dlls (what they have to offer).




> *cwGRID*


Don't bother - it's "in the works" already (80% already done).

Here's a ScreenShot of what I've currently accomplished:


Olaf

----------


## reexre

*UPDATE*

I could not get out from Dlls-hell

Tried this, but did not work



> ```
> Public Function NewWidget(ClassName As String) As Object
>   If App.Logmode Then 'we run compiled
>      Set NewWidget = New_c.RegFree.GetInstanceEx(App.Path & "\vbRC5BaseDlls\vbWidgets.dll", ClassName)
>   Else 'we run in the IDE, so we create the instance from the registered version
>      Set NewWidget = CreateObject("vbWidgets." & ClassName)
>   End If
> End FUnction
> ```


Now it's used:
in cFmain


```
Public PANELMain As cwPanelMain
Private Sub Class_Initialize()
    Set Form = Cairo.WidgetForms.Create(vbSizable, "PhotoModularFX " & APP.Major & "." & APP.Minor & "." & APP.Revision, , 900, 700)
    Set PANELMain = Form.Widgets.Add(New cwPanelMain, "PanelMain", Form.ScaleWidth - 400, 0, 400, 300)
End Sub
```

in cwPanelMain:


```
Private WithEvents cFile1 As vbWidgets.cwFileList
Private Sub Class_Initialize()
    Set W = Cairo.WidgetBase
    Set cFile1 = W.Widgets.Add(New cwFileList, "File1", 180, 20, 140, 240)
End Sub
```

So I created a little Exe to Run as Administrator for the registration of vbWidgets.dll based on this code.

No Dll problem for vbRichClient and my own dll PhotoFX.dll


```
Public WithEvents fxMIX2 As PhotoFX.MIX2
Private Sub Class_Initialize()
Set fxMIX2 = GetInstanceFromBinFolder("PhotoFX", "Mix2", "BIN")
```


UPDATE on 1st Post   
Update *0.2.132*   (28-Apr-2015)

----------


## smileyoufu

How does this example is done using cwGrid?
Can provide the sample project file to learn?

----------


## Schmidt

> How does this example is done using cwGrid?
> Can provide the sample project file to learn?


This is not done *using* the cwGrid, but instead the *approach* (how cwGrid itself was implemented)
is used in cwPropertyGrid as well ("visually inheriting" from cwVList).

I will post an appropriate example either end of this week - maybe mid next week, but not much later,
in the CodeBank.

Olaf

----------


## reexre

*0.2.161*

Finally , after hard work here there is the Full Functional Version.   :Smilie:   :Smilie:   :Smilie: 

Now it's possible to tweak parameters values (Disabled in previous vbRichClient-GUI version)

Go to #1 post of this thread to download

----------


## Schmidt

> *0.2.149*
> 
> Finally , after hard work here there is the Full Functional Version.    
> 
> Now it's possible to tweak parameters values (Disabled in previous vbRichClient-GUI version)
> 
> Go to #1 post of this thread to download


Nice so far.

Maybe a hint again for your currently needed Installer/Uninstaller (which I think is only 
used for the vbWidgets.dll).

As already written further above - to create new Widgets you will simply have to 
Paste the following small Function into a *.bas-Module (e.g. into the same one, which contains Sub Main)



```
Public Function NewWidget(ClassName As String) As Object
  If App.Logmode Then 'we run compiled
     Set NewWidget = New_c.RegFree.GetInstanceEx(App.Path & "\vbRC5BaseDlls\vbWidgets.dll", ClassName)
  Else 'we run in the IDE, so we create the instance from the registered version
     Set NewWidget = CreateObject("vbWidgets." & ClassName)
  End If
End Function
```

Now, with that routine in place, you should do a global project-search for the string:
'New cw'  (without the apostrophes)

This should stop on all positions, where you create any Widget-Instances...

Now you will only have to decide, if the "marked" WidgetCreation line in your current search-
result specifies a Widget from vbWIdgets.dll (as e.g. cwVList) - or if one of your own 
(Project-Private defined cwMyWidget-Classes) was found.

In case of a Widget from vbWidgets.dll, you can then use:
e.g. instead of:


```
Form.Widgets.Add New cwVList, ..., ...
```

The new regfree Creation-Routine from your *.bas Module this way:


```
Form.Widgets.Add NewWidget("cwVList"), ..., ...
```

This shouldn't take more than 2 Minutes or so.

The little NewWidget-Function Auto-Detects already, whether you run your Project within the IDE - 
and in this case it uses the recently compiled (or registered) version of vbWidgets.dll - 
or in case you run compiled - it will "draw the Widget-Instance" regfree from the vbWidgets.dll
which was placed in your \vbRC5BaseDlls\-Folder (sitting there beside vbRichClient5.dll).

Just take care (in case you edit stuff on vbWidgets.dll and recompile yourself), that this recently
compiled or registered version of vbWidgets.dll is placed also in the \vbRC5BaseDlls\-Folder,
before you test it in Binary-Format, or "zip it for deployment". That latter one is a requirement,
because the IDE will "link in the interfaces from the Widget-Classes" always from the recently
registered (or compiled) Version of vbWidgets in your System - so when you later run your
Executable-Binary - those "linked in interfaces" have to match with the ones it finds in the 
regfree loaded version of vbWidgets.dll, it finds in your \vbRC5BaseDlls\-Folder.

That's because the vbWidgets.dll Project is still in development - and although many of its 
Widgets are already "interface-stable enough", there's still some Widget-Classes where some
changes or enhancments are made - and thus this Dll-Project is (other than the vbRichClient5-Dll)
not yet switched into "Binary-Compatibility Mode" (it still is at "Project-Compatibility"), which 
allows for easier creation of Project-Groups for Debugging.

HTH

Olaf

----------


## smileyoufu

Thank you very much.
Look forward to your demo release schedule

----------


## reexre

Thank you very much *Olaf*, I'll take into account your Suggestion later.

I have a simple question:

I populate a *cwDropDownList* where items are not inserted in alphabetical order.

1)-I want that they appear in the list in alphabetical order
2)-and I want that when an item is selected, the returned position(index) is not the Alphabetical order one,
but the one corrisponding to Insertion order.
(don't know if I was clear)

EG
Insertion
HDR    (item 0)
DoG    (item 1)
ABS    (item 2)

Appear:
ABS 
DoG 
HDR 

and
when I select HDR I want to be returned 0
when I select ABS I want to be returned 2

To populate the cwDropDownList I do this way:  (maybe there's a better way)


```
    Set cmbFxSelector = W.Widgets.Add(New cwDropDownList, "cmbFxSelector", 5, 250, 90, 25)
    Set COL = New_c.Collection(False, TextCompare, True)
    For I = 0 To UBound(ActionString)
        COL.Add I, ActionString(I)  
    Next
    cmbFxSelector.SetDataSource COL, "cmbData"
```

----------


## Schmidt

> I populate a *cwDropDownList* where items are not inserted in alphabetical order.
> 
> 1)-I want that they appear in the list in alphabetical order
> 2)-and I want that when an item is selected, the returned position(index) is not the Alphabetical order one,
> but the one corrisponding to Insertion order.
> (don't know if I was clear)


That's entirely clear (and a quite common scenario).

The cwDropDownlist implements the Widget-DataSource-Methods 
(which work in conjunction with the cDataSource-Class-Type).

cDataSource in turn can be "handed-over" either a cCollection or a cRecordset.

You discovered that already on your own.

What now remains is, that you make use of the cDataSource-Class's Sort-Property.

Code into a *normal* VB-TestForm (but ensure Project-References to vbRichClient5 and vbWidgets):



```
Option Explicit

Private WithEvents pnlTest As cWidgetForm
Private WithEvents cmbFx As cwDropDownList
 
Private Sub Form_Load()
  Set pnlTest = Cairo.WidgetForms.CreateChild(hWnd)
  Set cmbFx = pnlTest.Widgets.Add(New cwDropDownList, "cmbFx", 10, 10, 200, 25)
  
  Dim Col As cCollection
  Set Col = New_c.Collection(False)
      Col.Add 0, "HDR"
      Col.Add 1, "DoG"
      Col.Add 2, "ABS"
 
  cmbFx.SetDataSource Col, "cmbData"
  cmbFx.DataSource.Sort = "Key Asc" 'or "Key Desc" if you want descending Order
  cmbFx_Click
End Sub

Private Sub Form_Resize()
  ScaleMode = vbPixels
  pnlTest.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
 
Private Sub cmbFx_Click()
  If cmbFx.ListIndex < 0 Then Exit Sub
  Caption = cmbFx.DataSource("Value") & " " & cmbFx.DataSource("Key")
  'or alternatively: Caption = cmbFx.DataSource(1) & " " & cmbFx.DataSource(0)
End Sub
```

Here is a ScreenShot:


The Sort-behaviour can (other than with VB-Combo or ListControls)
be switched at Runtime (either to Asc, Desc or an empty String in the Sort-Prop will ensure "no sorting" again)

Olaf

----------


## reexre

New *UPDATE 0.2.319*

download at 1st Post *Here*

[New Node Effects:]

* DoG (Difference of Gaussians) - Good for Countours
* DoG: Fine Radius Tuning:  Now R Value can be floating point, Not only integer. (Usefull for small radius)
* Temperature - Simple Red&Blue-space changes
* Dithering - Error Diffusion Dithering Floyd-Steinberg, Sierra and others
* Distorsion - Fisheye , Pinch, Lens, WideAngle and others
* Black Borders - Vignetting
* SmoothStep -
* Nature - Nature Inspred filters  

[Other:]
* *Full Portable*: No Dlls registration Needed        *thanks Olaf!*
* Node Selector: -Sorted List, -Just click List to ADD new Node
* Performances

DoG:



Dithering


Distorsion

----------


## reexre

Update 0.2.399 (14-may-2015)
[New Node Effects:]
* FDoG (DoG along Flow)
* PYRAMID - Pyramid Based Level-Details enhancement/reduction
* Noise (Fractional Brownian Motion)
[Other:]
-Fine Blur Radius (cents)
-Improved DoG

----------


## reexre

Update 0.2.471 (20-may-2015)
[New Node Effects:]
* Pyramid RGB (Pyramid Based Level-Details enhancement/reduction)
* Noise Deformer  (Spatial deform by Noise)
* Kuwahara filter (Single channel)
[Other:]
- Click blackboard for screenshot (Saved on Screenshots Folder)
- a little faster FakeHDR
- Fixed a bug on "DoG Flow" 
- Changed RGB wheights of HCY-colorspace (CCIR 601)
- Managed cairoFSO bug (Sometimes ShowOpenDialog function returns values like: "AAAA.jpg|01.jpg")

----------


## Schmidt

> - Managed cairoFSO bug (Sometimes ShowOpenDialog function returns values like: "AAAA.jpg|01.jpg")


Are you sure, that you didn't activate the MultiFile-Select-Flag (OFN_ALLOWMULTISELECT)?
Because that's the return-format which gets delivered, in case you made a selection of multiple Files.

Olaf

----------


## reexre

I applied no flags, so they are the default ones. And I tried to multiselect, but it is not allowed by default (seems to me)
It happens when I load picture A and then I load picture B. If I load first picture B, no error. And it happens only with certain filesname/picture.
The filename after separator | is not any one of current folder. it's a number name such as 01.jpg , 1.jpg
I thought it could be due to Dropbox , I think it "appends" extra data on files.
When copying files from "Dropbox folders" to external USB storage , a system warning tells that "some extra data" will not be copyed.


NTFS to FAT

----------


## Schmidt

> I applied no flags, so they are the default ones. And I tried to multiselect, but it is not allowed by default (seems to me)


The Flag which enables the selection of multiple Files is: OFN_ALLOWMULTISELECT ...

And I tried with the new RC5-version 5.0.31 to handle the ZeroChar-Detection
on returned results a bit differently now - maybe that makes a difference on XP
(it didn't make any on Win7 and Win8 which I tested here).

Would be nice if you could check this new version out on your XP-machine 
(without your applied Workarounds) - and give me a shout in case the behaviour 
is still there...

Olaf

----------


## Tanner_H

Hi reexre.  Looks like you are making lots of continued improvements to the program.  Nice work!

I notice some of the effects you've added are identical to those in PhotoDemon.  If you developed them independently, that's great, but if you based them off PhotoDemon code, please make sure to follow the project's BSD license (which is clearly marked at the top of all source files).

In particular, notice of copyright and a copy of the license must be included with your project.  This is especially important if you used PhotoDemon code for filters like Kuwahara, which an outside developer contributed to PD.  I need to make sure the copyrights of my third-party contributors are respected.

----------


## reexre

Tanner
Kwuahara is done by myself.


```
Public Sub ACTION41_Kuwahara(caller As Long, v1() As Double, _
                             oV1() As Double)
    Dim X      As Long
    Dim y      As Long
    Dim Xt     As Long
    Dim Yt     As Long
    Dim vv     As Double

    Dim R      As Long
    Dim pXF    As Long
    Dim pXT    As Long
    Dim pYF    As Long
    Dim pYT    As Long
    Dim pX     As Long
    Dim pY     As Long

    Dim i      As Long

    Dim MinSD  As Double
    Dim CT     As Double
    Dim J      As Long


    R = MAINparams(caller).p(1)
    If R < 1 Then R = 1

    Xt = UBound(v1, 1)
    Yt = UBound(v1, 2)
    ReDim oV1(Xt, Yt)


    Dim Mean(1 To 4) As Double
    Dim stdDEV(1 To 4) As Double
    Dim SUM    As Double
    Dim SUM2   As Double

    SETprogress 0

    For X = 0 To Xt

        For y = 0 To Yt

            For i = 1 To 4

                If i = 1 Or i = 3 Then
                    pXF = X - R
                    If pXF < 0 Then pXF = 0
                    pXT = X
                Else
                    pXF = X
                    pXT = X + R
                    If pXT > Xt Then pXT = Xt
                End If


                If i <= 2 Then
                    pYF = y - R
                    If pYF < 0 Then pYF = 0
                    pYT = y
                Else
                    pYF = y
                    pYT = y + R
                    If pYT > Yt Then pYT = Yt
                End If

                SUM = 0
                SUM2 = 0
                CT = 0
                For pX = pXF To pXT
                    For pY = pYF To pYT
                        vv = v1(pX, pY) * 50
                        SUM = SUM + vv
                        SUM2 = SUM2 + vv * vv
                        CT = CT + 1
                    Next
                Next

                stdDEV(i) = (CT * SUM2 - SUM * SUM) / CT

                Mean(i) = (SUM / CT) * 0.02
            Next i

            MinSD = 1E+88
            For i = 1 To 4
                If stdDEV(i) < MinSD Then MinSD = stdDEV(i): J = i
            Next
            
            oV1(X, y) = Mean(J)

        Next
        If X Mod 240 = 0 Then SETprogress 100 * X / Xt
    Next

    SETprogress 100

End Sub
```

I took from your code only nature filters and temperature do they nave some kind of copyright ? 
In case give me instructions I will do ASAP

----------


## reexre

> Would be nice if you could check this new version out on your XP-machine 
> (without your applied Workarounds) - and give me a shout in case the behaviour 
> is still there...


Now not on XP... I'll be on XP in fiew days . In case something will not work with New Version of vbRC I'll tell you (thanks)

----------


## Tanner_H

> Tanner
> Kwuahara is done by myself.


Nice work!  I haven't seen many Kuwahara implementations "in the wild", let alone in VB, so it is great to see other people working with it.




> I took from your code only nature filters and temperature do they nave some kind of copyright ? 
> In case give me instructions I will do ASAP


Yes, like all open-source projects, PhotoDemon's code is under copyright.  Open-sourcing a program doesn't remove copyrights; it just means people are allowed to use your copyrighted work with minimal restrictions.  But the work still belongs to the original creator.

The BSD license PhotoDemon uses is probably the easiest and simplest open-source license.  Somewhere in your project (About screen, README, Help PDF, whatever), you just need to make sure the user sees which parts of the program are BSD-licensed, and what the terms of the license are.  So something like this is fine:



```
Temperature and Nature Filters originally from the PhotoDemon project, www.photodemon.org.  

PhotoDemon is Copyright (c) 2015 by Tanner Helland and Contributors. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```

Since your project is closed source, the second point is what matters: "Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution."

Open-source licenses are important for a lot of reasons.  They are the only way users know to report bugs or suggestions upstream, so I can fix and improve the original code (and all the other projects who use the code can benefit).

They are also important for letting others know that they are free to use those filters and features in their own projects.

Anyway, keep up the good work.  The new vbWidgets interface is a really nice improvement.

----------


## reexre

I changed my mind, those "effects" have been removed from my project.

At the moment I prefer this project to be the result of my own work.
I prefer not to include in readme, PDF-help ecc... links/names of contributors except Olaf Schmidt or someone who will have or had an heavy impact on the quality of the project.

----------


## reexre

*Update 0.2.555* (28-may-2015)
[Nodes]
* New RGBtweaker Node
* New Standard POW Node 
* New Local HE (Histogram Equalization)
* New Anisotropic Kwuahara (Still developing)
* New "Pencil Drawing" (Still developing)
[Other:]
-Improved Kwuahara
-Bug Fix on MUL (base 0.5)

----------


## reexre

*Update 0.2.770* (14-jun-2015)
[Nodes]
* Changed Stipple
* Little change on LCDDisplay (color)
[Other:]
- New check-switch parameters look
- Added Mix2 (Blend) modes: Dissolve,Screen(Dodge),Overlay,Hard Light,Soft Light (Cairo),Color Dodge and Color Burn
- Little bug fix on Histogram Eq. and Local HE.

Update 0.2.669 (5-jun-2015)
[Nodes]
*New Median
*New LCD-Display
*New Glow (Still developing)
*New Exp-Log functions
*New STIPPLE 
[Other:]
-Distortion: Now Rotate without Skew
-Finished Local HE

and a lot of
* new Flow-Projects*

----------


## reexre

Coming soon sepia and scratches ... for old film style

----------


## reexre

*Update 0.2.865* (20-jul-2015)
[Nodes]
* NEW Input2 (Secondary Input Picture)
* NEW Tilt-Shift - Fake Miniature
* NEW Curve: Simple 5Points Spline Curve transformation (X at every 1/4)
* Improved Size2X, SizeHalf (15851)
[Other]
- Improved Histogram Eq. and Local HE.

*Update 0.2.822* (21-jun-2015)
[Nodes]
* NEW Sepia (from RGB)
* NEW Sepia (from GrayScale)
* NEW Scratches
* NEW 8-Colors
[Other]
- A lot faster "Local HE"
- Improved Noise-node
- Improved Histogram Eq. and Local HE.

----------


## reexre

*@ OLAF*

hi
please could you give me some information about the Antialiasing CairoContest options?


CC.AntiAlias = CAIRO_ANTIALIAS_DEFAULT
CC.AntiAlias = CAIRO_ANTIALIAS_GRAY
CC.AntiAlias = CAIRO_ANTIALIAS_SUBPIXEL
I need the faster except CAIRO_ANTIALIAS_NONE

http://cairographics.org/documentati...ants-antialias

By the way, in widgets I suppose this Setting is inheritable. Am I right ?

To me CAIRO_ANTIALIAS_DEFAULT seems slower
thanks

----------


## reexre

Update* 0.2.919 (31-jul-2015)*
[Nodes]
* NEW RGB>HSL - Colorspace conversion according to Quasimondo.com
* NEW HSL>RGB - 	"
* NEW SNN (1D) - Symmeric Nearest Neighour Smoothing filter
* NEW SNN (RGB)	- "
* NEW FLIP  - Verical Horizontal & Both Filp
* NEW FLIP3 - 3channels Verical Horizontal & Both Filp
* NEW RAMP - Gradient Ramp:Left-Right,Right-Left,Up-Down,Down-Up,Cone Up,Cone Down,Pyramid Up,Pyramid Down,Auger Right, Auger Left
- Little larger Font of "Fx Selector"



Update *0.2.890* (23-jul-2015)
[Nodes]
* NEW HistoMATCH - Histogram Match (Histogram Match - Change Input1 to match Input2 Histogram)
* NEW Pixelate - Pixelate
- FLOW: changed Sobel weights
- Bug fixed when trying to add a new connection (MouseUp-Event)
- Faster Interface

----------


## reexre

*Update 0.2.998* (19-Aug-2015)
[Nodes]
* NEW Formula - Editable Custom Formula
* NEW Sketch - Sketch style abstraction
* NEW HMD - Height Map Deformer. Deform by Input Height Map
* NEW WATERMAP - Simulation of raindrops (Experimental)
* NEW GLASS -  Glass Tiles (1 ch and 3 ch)
* NEW QUANTIZE - Uniform, Histogram Based
[Other]
- New RAMP/gradient settings: Repeat, and RepeatMode
- Invert - Added ByPass option.
- CheckBox - Fixed bug: Sometimes (old projects) unchangeable..
- Size2x,SizeHalf: Customizable Kernels : (15851)(0.2-5-9.6-5-0.2) (1.5-5-7-5-1.5)

----------


## reexre

*Update 0.2.1103* (15-Sep-2015)
[Nodes]
- NEW BCS :  Brightness Constrast Saturation (RGB)
- NEW DCT BP: Discrete Cosine Transform Band Pass (experimental)
- NEW DCT fx: Discrete Cosine Transform FX (experimental)
- NEW Formula2 : 2 Variables custom Formula
- NEW Formula3 : 3 Variables custom Formula
- NEW Offset :  Horizontal-Verical Offset
- NEW ADD : New node Add, so no need to use [Value]&[Mix2]
[Other]
- Cntrl-C, Cntrl-V to copy and paste Parameters value from one node to another (of the same type)
- PAINT: Added Smoothed parameter
- RAMP: Added shape option
- FLOW: New Smooth algorithm
- GUI: Little Smaller Nodes
- Bug Fix FLIP3 : Both
- Bug Fix RAMP

----------


## reexre

@OLAF and who may help

I'm trying to implement an "Halftone" FX.

To refresh , each Fx Sub is called this way:



```
Public Sub ACTION86_HALFtone(caller As Long, Input() As Double, _
                             Output() As Double)
```

where input and output are 2D array of doubles whom ranges from 0-1.
and, in this case, there's 1 input and 1 output.

I need to paint/draw on a Surface so:



```
    Dim Srf As cCairoSurface
    Dim CC As cCairoContext

    xT = UBound(Input, 1)
    yT = UBound(Input, 2)

    Set Srf = New_c.Cairo.CreateSurface(xT + 1, yT + 1, ImageSurface)
    Set CC = Srf.CreateContext
```

At this point I need to Draw on the CC surface and get the Bytes ( to put them on "Output" ), so:



```
    Dim Bytes() As Byte

    CC.Paint vbBlack
    CC.SetLineWidth 0.1, False
    CC.SetSourceColor vbWhite, 1
```

Inside some cycles the CC.surface is drawn, for example this way:



```
For X ...
For Y ...
            CC.Ellipse X, Y, v, v
            CC.Fill
Next
Next
```

Now, to put the result to the "Output" I do it this way:




```
    CC.Surface.BindToArray Bytes

    For X = 0 To xT

        For Y = 0 To yT
            Output(X, Y) = 1 - CDbl(Bytes(X * 4+1 , Y))/255
        Next
    Next
    CC.Surface.ReleaseArray Bytes

    Set CC = Nothing
    Set Srf = Nothing
```

If I remember the Bytes should be of ABGR that's way X is * 4
The Problem is that some times it works, but sometimes only some left Part of the surface is returned. (contained in Bytes)
these ways:
Right:

Wrong:



I really can't figure out what's wrong! :-/
Hope for your help!

----------


## reexre

Hi
Just resolved !!!
It was caused by *CC.Ellipse X, Y, v, v*
when V=0.
To Resolve just a V >=0 is needed. (even 0.001)

----------


## reexre

*Update 0.2.1162* (10-Oct-2015)
[Nodes]
- NEW Gamma , Gamma3 : Forward Inverse Gamma Correction
- NEW Halftone :  Oriented Round/Squared dots Half toning
- NEW Rgb>XYZ Colorspace conversion
- NEW XYZ>RGB Colorspace conversion
- HSL : New Standard RGB<->HSL colorspace conversion
[Other]
- Smaller Watermark font-text
- Icons on Fx-Selector / Constructor

----------


## reexre

*Update 0.2.1222* (27-Oct-2015)
[Nodes]
- NEW VRLCN: Variable Radius Local Contrast Normalization (WIP)
- NEW RGB>YUV , RGB>YCbCr Colorspace conversion
- NEW YUV>RGB , YCbCr>RGB   "
- GLOW: Improved (test it with Glow.txt Projects)
- FLOW: Step back to previous Smooth-algorithm [Before 0.2.1103 15-Sep-2015]
[Other]
- CheckBox, ComboList: Apparence
- Main BackGround: Dark Colored
- About 300Kbytes lighter EXE

----------


## reexre

*Update 0.2.1265* (09-NOV-2015)
[Nodes]
- NEW Diffusion: Iso/Anisotropic Diffusion.
[Other]
- Bilateral: Removed "orientation based"
- Improved Internal Memory Management

until update of Softpedia use Direct link

----------


## reexre

*Update 0.2.1354* (08-Dec-2015)
[Nodes]
- NEW Mesh: Straight line draw by salient points.
- NEW STROKES: Art-Draw Strokes
- NEW POIS: Art-Draw Pois
- NEW STDDev: Standard Deviation
- NEW STDDev3: Standard Deviation (3 Channels)
- NEW LCN: Local contrast normalization (WIP)
- VRLCN: Little improvements
[Other]
- *** Bilateral: Bug fix on "fast-mode on" *** (Was Causin Crash!)
- Added "Activation-Key-Request Form".
- Added Projects-Filter by Constructor Selection.
- Overall speed improvement.

until update of Softpedia use Direct link

----------


## reexre

Coming soon update with new FXs

https://www.youtube.com/playlist?lis...V4zNdMCGm4sycb

----------


## reexre

Download here

until Softpedia.com update


*Update 0.2.1467* (07-Jan-2016)

[Nodes]
- NEW BilaOA: Oriented-Aligned Bilateral Filter
- NEW ZMBLUR: Zoom Blur 1 channel
- NEW ZMBLUR3: Zoom Blur 3 channels
- NEW MTBLUR: Motion Blur 1 channel
- NEW MTBLUR3: Motion Blur 3 channels

- MIX2 (Blend): 6 New mix modes:
    Linear Dodge
    Linear Burn
    Linear Light
    Pin Light
    Abs Diff.
    Exclusion
    + Swap Inputs option

- VRLCN: Improvements and more parameters

- FLOW: New 5x5 Dx,Dy Kernels

[Other]
- Bugs fix: StdDEV,StdDEV3


*
Update 0.2.1400* (21-Dec-2015)
[Nodes]
- NEW ThrBLUR: - Threshold BLUR
- NEW ThrBLUR3: - Threshold BLUR 3 channels
- GLOW: New Algorithm
[Other]
- BugFix: RGB>HSL Bug fix (Quasimondo)
- BugFix: AutoArrange
- Basic Error-Handler implementation

----------


## reexre

List of Node-Fx available:

LIST of NODE/FXs  -  V 0.2.1469



```
001 (059) - 8COLORS	 3 3  params:2
		Retro 8Colors style
			Parameters : 
				Dot Size -	From 1 to 32
				Gap Size -	From 0 to 16


002 (085) - ADD	 1 1  params:1
		Add a constant Value to Input  
			Parameters : 
				value -	From -100 to 100


003 (021) - ADV. LC	 1 1  params:3
		Advanced Local Contrast (Still developing.. ) 
			Parameters : 
				Radius -	Integer
				Amount -	From 1 to 800
				Limit -	From 10 to 50


004 (081) - BCS	 3 3  params:3
		Brightness Contrast Saturation  (RGB)      
			Parameters : 
				Brightness -	From -100 to 100
				Contrast -	From -100 to 100
				Saturation -	From -100 to 200


005 (096) - BILAOA	 1 1  params:6
		Orientation-Aligned Bilateral Filter  (WIP)      
			Parameters : 
				Radius -	Integer
				Resistence -	From 1 to 250
				Extra Iterations       -	Integer
				Tang Radius % -	From 0 to 100
				Recompute Flow -	ON/OFF
				Interpolate -	ON/OFF


006 (013) - BILATERAL	 1 1  params:4
		Edge preserving smoothing filter. (In this software it take into account Gradient Angle too.)
			Parameters : 
				Radius -	Integer
				Range -	From 0 to 200
				Extra Iterations       -	Integer
				Fast Mode -	ON/OFF


007 (020) - BLUR	 1 1  params:2
		Gaussian Blur
			Parameters : 
				Radius -	Integer
				R Cents -	From 0 to 99


008 (034) - BORDERS	 1 1  params:3
		Darker Borders /  Vignetting     
			Parameters : 
				Inner -	From 1 to 100
				Outer -	From 1 to 100
				Choose type  :
					Black
					White


009 (022) - CARTMEV2	 1 1  params:3
		perform an Effect similar to LC (but separable) taken from an old program 
			Parameters : 
				Amount -	From 0 to 500
				Extra Iterations       -	Integer
				+ Bilateral  -	ON/OFF


010 (052) - CLAMP01	 1 1  params:0
		Clamp channel values between 0 and 1 - The Outputs of some modules can be outside of 0-1 range     


011 (062) - CURVE	 1 1  params:5
		Simple 5Points Spline Curve transformation (X at every 1/4)        
			Parameters : 
				000 -	From 0 to 100
				025 -	From 0 to 100
				050 -	From 0 to 100
				075 -	From 0 to 100
				100 -	From 0 to 100


012 (024) - DCT BP	 1 1  params:6
		EXPERIMENTAL Discrete Cosine Transform Band Pass    
			Parameters : 
				Pass Bad or Cut Band:
					Pass
					Cut
				Peak -	From 0 to 1000
				Low -	From -1 to 1000
				High -	From 0 to 1001
				Base Mode 

KEEP BASE = No overall luminance change 
NO BASE = Positve and negative output values 
HALF = Halftone Overall luminance value 
:
					Keep Base
					No Base
					0.5 (Half)
				Amplify -	From 100 to 400


013 (082) - DCT FX	 1 1  params:1
		EXPERIMENTAL Discrete Cosine Transform FX    
			Parameters : 
				Angle -	From -25 to 25


014 (109) - DEVELOP	 1 1  params:0
		Developing new Node Work In Progress! do not use!


015 (097) - DIFFUSION	 1 1  params:4
		Iso/Anisotropic Diffusion       
			Parameters : 
				Radius     -	Integer
				Resistence -	From 1 to 500
				Extra Iterations       -	Integer
				Anisotropy Mode     :
					None
					Simplified
					Advanced(E)
					Advanced(B)


016 (035) - DISTORTION	 1 1  params:5
		DISTORT, a set of spatial Deform algorithm (Rotate Too)   
			Parameters : 
				Deform Mode  (# = N of Parameters used)   :
					Pinch
					FishEye
					Sin Radial
					Radius to Power #
					Sin Cartesian
					Sqr Cartesian
					ArcSin Cartesian
					(1-ar^2) Cart.#
					LENS #
					Log # #
					3rd Ord.Poly.###
					WideAngle #
					Rotate #
					Swirl1 #
					Swirl2 #
				Param1 -	From 1 to 200
				Param2 -	From 1 to 100
				Param3 -	From 1 to 100
				Antialiased -	ON/OFF


017 (030) - DITHERING	 1 1  params:1
		Error Diffusion Dithering
			Parameters : 
				Dither Algorithm:
					floyd-steinberg
					jarvis
					stucki
					atkinson
					sierra
					RobertoMior


018 (028) - DOG	 1 1  params:5
		Difference of Gaussians  (R2=R*2) 
			Parameters : 
				Radius -	Integer
				Out Multiply -	From 100 to 5000
				Output Part:
					Both (+0.5)
					Positive
					Negative
					ABS
				R Cents -	From 0 to 99
				Invert output -	ON/OFF


019 (036) - DOGBYF	 1 1  params:6
		Flow based DoG (Difference of Gaussians)
			Parameters : 
				Radius -	Integer
				R Cents -	From 0 to 99
				Length Mul -	From 100 to 999
				Out Multiply -	From 100 to 5000
				Output Part:
					Both (+0.5)
					Positive
					Negative
					ABS
				Invert output -	ON/OFF


020 (046) - EXP-LOG	 1 1  params:1
		Perform Exp() or Log() function. More precisely: EXP=(Exp(x)-1)/(Exp(1)-1), LOG=Log(x*(Exp(1)-1)+1) 
			Parameters : 
				Exp or Log   :
					Exp
					Log


021 (092) - EXPER1	 1 3  params:0
		Just a Experimental function      


022 (027) - EXPERIMENT	 1 1  params:0
		NOT ready!


023 (023) - FAKEHDR	 1 1  params:6
		HDR tone Mapping
			Parameters : 
				Radius -	Integer
				Range -	From 0 to 200
				Extra Iterations       -	Integer
				Amount -	From 0 to 800
				Flatness -	From 0 to 800
				Radius Mode
-Fixed: All params are used
-Incremental: Radius and Iterations are Unused  :
					Fixed Radius
					Incremental Radius


024 (098) - FAKEHDR2	 1 1  params:3
		Fake HDR2 Experimental       
			Parameters : 
				Max Radius -	From 1 to 100
				Strength -	From 1 to 100
				BASE -	From 1 to 100


025 (106) - FFTTEST	 1 1  params:1
		EXPERIMENTAL fft Not Ready!  
			Parameters : 
				Rad 2^...    -	From 1 to 8


026 (069) - FLIP	 1 1  params:1
		Horizontal Vertical & Both Flip/Mirror     
			Parameters : 
				Flip Mode    :
					Horizontal
					Vertical
					Both


027 (070) - FLIP3	 3 3  params:1
		Horizontal Vertical & Both Flip/Mirror     
			Parameters : 
				Flip Mode    :
					Horizontal
					Vertical
					Both


028 (009) - FLOW	 1 2  params:2
		Calc Gradient Flow - Outputs 1-Magnitude, 2-Angle (Range 0-1)
			Parameters : 
				Smooth -	Integer
				Smooth Mode    :
					Standard
					Advanced


029 (076) - FORMULA	 1 1  params:1
		Formula - Custom Formula ... Powerfull but slow      
			Parameters : 
				Formula


030 (079) - FORMULA2	 2 1  params:1
		Formula2 - 2 inputs Custom Formula ... Powerfull but slow      
			Parameters : 
				Formula


031 (080) - FORMULA3	 3 1  params:1
		Formula3 - 3 inputs Custom Formula ... Powerfull but slow      
			Parameters : 
				Formula


032 (088) - GAMMA	 1 1  params:1
		Forward / Inverse Gamma Correction     
			Parameters : 
				Correction     :
					Forward
					Inverse


033 (089) - GAMMA3	 3 3  params:1
		RGB Forward / Inverse Gamma Correction     
			Parameters : 
				Correction     :
					Forward
					Inverse


034 (072) - GLASS	 1 1  params:3
		Glass effect (1 Channel)       
			Parameters : 
				Size   -	Integer
				Style     :
					Square
					Diamond
					Diamond2
					Diamond3
				Antialiased  -	ON/OFF


035 (073) - GLASS3	 3 3  params:3
		Glass effect (3 Channels)       
			Parameters : 
				Size   -	Integer
				Style     :
					Square
					Diamond
					Diamond2
					Diamond3
				Antialiased  -	ON/OFF


036 (048) - GLOW	 1 1  params:3
		Glow Effect     
			Parameters : 
				Radius   -	Integer
				Amount -	From 25 to 200
				Threshold -	From 50 to 100


037 (086) - HALFTONE	 1 1  params:3
		Halftone     
			Parameters : 
				Size -	From 30 to 150
				Dot Mode     :
					Black Rounded
					White Rounded
					Black Box
					Box 2
					Leaf
				Angle -	From 0 to 180


038 (053) - HATCHING	 1 1  params:3
		Hatching-Stipple  - Still developing     
			Parameters : 
				Size  -	From 40 to 100
				Iterations  -	From 1 to 200
				Previous State -	ON/OFF


039 (026) - HCY>RGB	 3 3  params:0
		Convert HCY (hue-saturation-Luma) colorspace to RGB Color space


040 (015) - HISTO EQU.	 1 1  params:2
		HISTOGRAM Equalization. (CLHE - Contrast Limited Histogram Equalization)
			Parameters : 
				Max Slope -	From 0 to 100
				Extremes Cut -	From 0 to 200


041 (064) - HISTOMATCH	 2 1  params:0
		Histogram Matching - Change Input1 to match Input2 Histogram


042 (074) - HMAPD	 4 3  params:2
		Height Map Deform. Deform by Heightmap (4th input as heightmap)       
			Parameters : 
				Amount   -	Integer
				Antialiased  -	ON/OFF


043 (066) - HSL>RGB	 3 3  params:1
		Convert HSL (Hue, Saturation, Luminance) to RGB colorspace with quasimondo.com or Standard Algorithm      
			Parameters : 
				Algorithm    :
					Quasimondo
					Standard


044 (000) - INPUT	 0 3  params:0
		The Loaded Picture


045 (060) - INPUT 2	 0 3  params:1
		Secondary support Input picture      
			Parameters : 
				File Path


046 (008) - INVERT	 1 1  params:1
		Invert a channel: Output = 1 - Input
			Parameters : 
				ByPass -	ON/OFF


047 (016) - K-MEAN 1D	 1 1  params:1
		Set N of Clusters
			Parameters : 
				Clusters -	Integer


048 (017) - K-MEAN 2D	 2 2  params:1
		Set N of Clusters
			Parameters : 
				Clusters -	Integer


049 (018) - K-MEAN 3D	 3 3  params:1
		Set N of Clusters
			Parameters : 
				Clusters -	Integer


050 (041) - KUWAHARA	 1 1  params:2
		Non-linear smoothing filter that preserves edges  
			Parameters : 
				Radius -	Integer
				Radius2 (Must be smaller than R1)     -	Integer


051 (043) - KUWANISO	 1 1  params:2
		Anisotropic Kuwahara  (Still Developing)  
			Parameters : 
				Radius -	Integer
				Extra Iterations       -	Integer


052 (012) - L CONTRAST	 1 1  params:1
		Set Radius 
			Parameters : 
				Radius -	Integer


053 (003) - LAB>RGB	 3 3  params:0
		Convert Lab colorspace to RGB Color space


054 (049) - LCD DISP.	 3 3  params:2
		LCD Display Effect    
			Parameters : 
				'Dot' Size  (Default=8)    -	Integer
				Threshold -	From 0 to 100


055 (099) - LCN	 1 1  params:2
		Local Contrast Normalization       
			Parameters : 
				Radius -	From 1 to 100
				'Source' vs Half -	From 0 to 100


056 (045) - LOCAL HE	 1 1  params:6
		Local Histogram Equalization   (CLAHE - Contrast Limited Adaptive Histogram Equalization) 
			Parameters : 
				Radius   -	Integer
				Step   (Must be <= Radius)     -	Integer
				Max Slope -	From 0 to 100
				Blend % -	From 0 to 100
				Circle Shaped -	ON/OFF
				Extremes Cut -	From 0 to 200


057 (047) - MEDIAN	 1 1  params:4
		Median Filter     
			Parameters : 
				Radius   -	Integer
				Step   (Must be <= Radius)     -	Integer
				Circle Shaped -	ON/OFF
				Extra Iterations       -	Integer
```

----------


## reexre

part 2:


```
058 (006) - MIX 2	 2 1  params:3
		Mix 2 channels
			Parameters : 
				Mix Mode:
					wheighted SUM
					MUL
					ADD
					SUB
					Lighten
					Darken
					Dissolve
					Screen(Dodge)
					Overlay
					Hard Light
					Soft Light (Cairo)
					Color Dodge
					Color Burn
					Linear Dodge
					Linear Burn
					Linear Light
					Pin Light
					Abs Diff.
					Exclusion
				<<A    -    B>> -	From 0 to 100
				Swap Inputs -	ON/OFF


059 (007) - MIX 3	 3 1  params:4
		Mix 3 channels
			Parameters : 
				Mix Mode:
					wheighted SUM
					SUM
				A -	From 1 to 100
				B -	From 1 to 100
				C -	From 1 to 100


060 (112) - MTBLUR	 1 1  params:2
		Motion BLUR (1 channel)
			Parameters : 
				Angle -	From -90 to 90
				Blur Amout -	From 5 to 100


061 (113) - MTBLUR3	 3 3  params:2
		Motion BLUR 3 channels
			Parameters : 
				Angle -	From -90 to 90
				Blur Amout -	From 5 to 100


062 (005) - MUL	 1 1  params:2
		Multiply by a Value (base 0.5 means an X shift by -0.5)
			Parameters : 
				(1) 50 = 0.5   (2) 100 = 1   (3) 200 = 2  -	Integer
				Based 0.5 -	ON/OFF


063 (038) - NOISE	 0 1  params:1
		NOISE - Fractional Brownian Motion 
			Parameters : 
				Frequency -	From 5 to 3000


064 (039) - NOISER	 1 1  params:4
		Spatial Deform by Noise (Fractional Brownian Motion)   
			Parameters : 
				X Frequency -	From 5 to 100
				Y Frequency -	From 5 to 100
				X Amount -	From 0 to 100
				Y Amount -	From 0 to 100


065 (083) - OFFSET	 1 1  params:3
		Horizontal veritcal Offset    
			Parameters : 
				Offset Mode     :
					Percentage
					Pixels
				Horizontal -	From -50 to 50
				Vertical -	From -50 to 50


066 (084) - OFFSET3	 3 3  params:3
		Horizontal vertical Offset    
			Parameters : 
				Offset Mode     :
					Percentage
					Pixels
				Horizontal -	From -50 to 50
				Vertical -	From -50 to 50


067 (001) - OUTPUT	 3 0  params:0
		The Output (saved Picture)


068 (011) - PAINT	 3 1  params:3
		Set first 2  Input as Outputs of FLOW, and 3th as Source to 'paint' to
			Parameters : 
				Brush Size -	Integer
				Extra Iterations       -	Integer
				Smoothed -	From 0 to 100


069 (044) - PENCIL	 1 1  params:0
		Pencil Drawing    (Still Developing) 


070 (063) - PIXELATE	 3 3  params:2
		Pixelate
			Parameters : 
				Dot Size -	From 1 to 32
				Gap Size -	From 0 to 16


071 (031) - POW	 1 1  params:1
		Standard Power  
			Parameters : 
				(1) 50 = 0.5   (2) 100 = 1   (3) 200 = 2  -	Integer


072 (004) - POWEX	 1 1  params:2
		Hi values decrease contrast, Low Values Increase Contrast - Special Kind of Power function (see PDF)
			Parameters : 
				Based on AVG -	ON/OFF
				(1) 50 = 0.5   (2) 100 = 1   (3) 200 = 2  -	Integer


073 (037) - PYRAMID D	 1 1  params:5
		Pyramid Based Level-Details Enhancement / Reduction
			Parameters : 
				Fine -	From 1 to 1000
				Medium -	From 1 to 1000
				Coarse -	From 1 to 1000
				BASE -	From 0 to 100
				Threshold -	From 0 to 100


074 (040) - PYRAMRGB	 3 3  params:5
		Pyramid Based Level-Details Enhancement / Reduction
			Parameters : 
				Fine -	From 1 to 1000
				Medium -	From 1 to 1000
				Coarse -	From 1 to 1000
				BASE -	From 0 to 100
				Threshold -	From 0 to 100


075 (078) - QUANTIZE	 1 1  params:2
		Simple quantization     
			Parameters : 
				N of segments (min=2)    -	Integer
				Method     :
					Uniform
					Histogram Based


076 (071) - RAMP	 0 1  params:4
		Gradient Ramp     
			Parameters : 
				Ranp Mode    :
					Left-Right
					Right-Left
					Up-Down
					Down-Up
					Cone Up
					Cone Down
					Pyramid Up
					Pyramid Down
					Auger Right
					 Auger Left
				Repeat       -	Integer
				Repeat Mode    :
					Standard
					Countinous
				Shape Mode    :
					Linear
					Sin90
					Sin180
					Cubic
					Sqr
					Pow2


077 (025) - RGB>HCY	 3 3  params:0
		Convert RGB colorspace to HCY (hue-saturation-Luma) Color space - For simplicity consider it as  HSL 


078 (065) - RGB>HSL	 3 3  params:1
		Convert RGB colorspace to HSL (Hue, Saturation, Luminance) with quasimondo.com or Standard Algorithm      
			Parameters : 
				Algorithm    :
					Quasimondo
					Standard


079 (002) - RGB>LAB	 3 3  params:0
		Convert RGB colorspace to Lab Color space


080 (090) - RGB>XYZ	 3 3  params:0
		Convert RGB colorspace to XYZ      


081 (094) - RGB>YUV	 3 3  params:1
		Convert RGB colorspace to Y'UV  Y(Luma)UV or YCbCr       
			Parameters : 
				ColorSpace     :
					YCbCr
					YUV


082 (050) - RGBSCREEN	 3 3  params:0
		RGB screen effect NOT Ready|    


083 (029) - RGBTWEAK	 3 3  params:3
		Add/Sub RGB Values  (it can be used even with other channels types)
			Parameters : 
				RED / Ch1 -	From -100 to 100
				GREEN / Ch2 -	From -100 to 100
				BLUE / Ch3 -	From -100 to 100


084 (058) - SCRATCHES	 0 1  params:2
		Scratches. to Simulate old film      
			Parameters : 
				Amount -	From 1 to 100
				Density -	From 50 to 1000


085 (056) - SEPIA	 3 3  params:0
		Sepia - Vintage       


086 (057) - SEPIA GRAY	 1 3  params:1
		Sepia - Vintage Starting from GrayScale Image         
			Parameters : 
				Blend Mode    :
					Standard
					Overlay
					Screen


087 (042) - SHIFT	 1 1  params:1
		'Shift' left/right - Very useful to HUE shift  
			Parameters : 
				Value -	From -500 to 500


088 (014) - SHOCK	 1 1  params:2
		Shock filter ...  Still Developing
			Parameters : 
				Length -	Integer
				Extra Iterations       -	Integer


089 (054) - SIZE2X	 1 1  params:1
		Resize Width and Height by 2X      
			Parameters : 
				Kernel Mode    :
					Light Blur (1) 
					No Blur (0.2) 
					More Blur (1.5)


090 (055) - SIZEHALF	 1 1  params:1
		Resize Width and Height by Half     
			Parameters : 
				Kernel Mode    :
					Light Blur (1) 
					No Blur (0.2) 
					More Blur (1.5)


091 (077) - SKETCH	 3 3  params:5
		Sketch style Abstraction on RGB channels      
			Parameters : 
				Edge Darkness -	From -100 to 100
				bkgrnd Darkness -	From -100 to 100
				BackGround -	ON/OFF
				bkgrnd Angle -	From 0 to 100
				BackGround Density     :
					2-Normal
					3-Sparse1
					4-Sparse2
					1-Dense


092 (033) - SMOOTH S	 1 1  params:2
		Smooth Step (Threshold)
			Parameters : 
				To -	From 0 to 1000
				From -	From 0 to 1000


093 (067) - SNN	 1 1  params:2
		Symmetric Nearest Neighbour (Edge Preserving Smoothing)      
			Parameters : 
				Radius   -	Integer
				Extra Iterations       -	Integer


094 (068) - SNN3	 3 3  params:2
		RGB Symmetric Nearest Neighbour (Edge Preserving Smoothing)      
			Parameters : 
				Radius   -	Integer
				Extra Iterations       -	Integer


095 (102) - STDDEV	 1 1  params:3
		Standard Deviation          
			Parameters : 
				Radius    -	From 1 to 15
				Mul Factor    -	From 10 to 100
				Output Invert -	ON/OFF


096 (103) - STDDEV3	 3 3  params:3
		Standard Deviation 3         
			Parameters : 
				Radius    -	From 1 to 15
				Mul Factor    -	From 10 to 100
				Output Invert -	ON/OFF


097 (051) - STIPPLE	 1 1  params:3
		Stipple effect  still Developing!    
			Parameters : 
				Dot Size  -	From 40 to 100
				Iterations  -	From 1 to 200
				Previous State -	ON/OFF


098 (107) - THRBLUR	 1 1  params:5
		Threshold Gaussian Blur
			Parameters : 
				Radius -	Integer
				R Cents -	From 0 to 99
				Threshold -	From 5 to 999
				Extra Iterations       -	Integer
				Fast Mode -	ON/OFF


099 (108) - THRBLUR3	 3 3  params:5
		Threshold Gaussian Blur, 3 channels
			Parameters : 
				Radius -	Integer
				R Cents -	From 0 to 99
				Threshold -	From 5 to 999
				Extra Iterations       -	Integer
				Fast Mode -	ON/OFF


100 (061) - TILT SHIFT	 3 3  params:4
		Fake Miniature - ToyEffect - Good with 'Panoramas' Pictures       
			Parameters : 
				Horizon -	From 1 to 99
				Amount -	From 1 to 200
				Saturation -	From 0 to 100
				Fast Mode -	ON/OFF


101 (087) - TRACE	 1 1  params:0
		Trace WIP - Still developing!     


102 (019) - USM	 1 1  params:3
		Unsharp Mask         
			Parameters : 
				Radius -	Integer
				Amount -	From 1 to 300
				Threshold -	From 0 to 100


103 (010) - VALUE	 0 1  params:1
		A constant Value (No input, only 1 output)
			Parameters : 
				Constant Value ( 50=0.5   100 = 1   200 = 2 )  -	Integer


104 (032) - VRCLAHE 	 1 1  params:2
		Variable Radius CLAHE (a sort of Fake HDR) - Very slow, since for each pixel is done a Contrast Limited Histogram Equalization using its pixel neighbour window    
			Parameters : 
				Max Contrast -	From 20 to 100
				Max Radius -	From 20 to 80


105 (093) - VRLCN	 1 1  params:5
		Variable Radius Local Contrast Normalization (WIP)      
			Parameters : 
				Max Radius -	From 1 to 100
				'Source' vs Half -	From 0 to 100
				Norm Strength -	From 50 to 200
				SQR: Attenuate low constrast regions
Linear: Standard, enphasize low constrast regions         :
					Square Root
					Linear
				Radius Sense -	From -100 to 100


106 (114) - VRLCN2	 1 1  params:5
		DO NOT USE ! WIP - Variable Radius Local Contrast Normalization      
			Parameters : 
				Max Radius -	From 1 to 100
				'Source' vs Half -	From 0 to 100
				Norm Strength -	From 50 to 200
				SQR: Attenuate low constrast regions
Linear: Standard, enphasize low constrast regions         :
					Square Root
					Linear
				Radius Sense -	From -100 to 100


107 (075) - WATERMAP	 0 1  params:4
		Water Height Map , to use as input for HMD (HeightMap Deformer)     
			Parameters : 
				Water Mode    :
					Pool
				Pre Iterations   -	Integer
				Rain Density    -	Integer
				Speed (For Video Frames)    -	Integer


108 (100) - XMESH	 1 1  params:1
		Creates a Mesh by selecting the most relevant points and drawing them according to proximity       
			Parameters : 
				N Points -	From 1000 to 10000


109 (104) - XPEN	 3 3  params:0
		Experimental Pencil         


110 (105) - XPOIS	 3 3  params:3
		Experimental Pois Art        
			Parameters : 
				Max Radius    -	From 20 to 99
				BackGround:
					Gray
					White
					Black
				Gaps Fill:
					Low x1
					Medium x2
					High x4
					SuperHigh x8


111 (101) - XSTROKES	 3 3  params:5
		Experimental Art-Draw Strokes        
			Parameters : 
				Density    -	From 20 to 1000
				'Curvature' -	From 20 to 500
				Pressure (Alpha) -	From 10 to 100
				BackGround:
					White
					Black
				PenSize -	From 1 to 100


112 (091) - XYZ>RGB	 3 3  params:0
		Convert XYZ colorspace to RGB      


113 (095) - YUV>RGB	 3 3  params:1
		Convert Y'UV or YCbCr Colorspace to RGB      
			Parameters : 
				ColorSpace     :
					YCbCr
					YUV


114 (110) - ZMBLUR	 1 1  params:4
		ZOOM BLUR (1 channel)
			Parameters : 
				Center X -	From -200 to 200
				Center Y -	From -200 to 200
				Blur Amout -	From 1 to 100
				Progressive = Blur More far from center      :
					Constant
					Progressive
					Prog. Squared
					Prog. Squared 2


115 (111) - ZMBLUR3	 3 3  params:4
		ZOOM BLUR 3 channels
			Parameters : 
				Center X -	From -200 to 200
				Center Y -	From -200 to 200
				Blur Amout -	From 1 to 100
				Progressive = Blur More far from center      :
					Constant
					Progressive
					Prog. Squared
					Prog. Squared 2
```

----------


## reexre

Download Here
or from SoftPedia

Update *0.2.1500* (21-Feb-2016)
[Nodes]
- VRLCN:   Changed weight of last Parameter (Radius Selection Sensitivity)
- BILAOA:  Changed way of flow-Smooth ((2nd way))
- RGB>YUV: Added YIQ colorspace conversion.
- NEW "PNG out": Save Output as PNG.
[Other]
- New Program Icon


Update *0.2.1467* (07-Jan-2016)
[Nodes]
- NEW BilaOA: Oriented-Aligned Bilateral Filter

- NEW ZMBLUR: Zoom Blur 1 channel
- NEW ZMBLUR3: Zoom Blur 3 channels
- NEW MTBLUR: Motion Blur 1 channel
- NEW MTBLUR3: Motion Blur 3 channels

- MIX2 (Blend): 6 New mix modes:
	Linear Dodge
	Linear Burn
	Linear Light
	Pin Light
	Abs Diff.
	Exclusion
	+ Swap Inputs option

- VRLCN: Improvements and more parameters

- FLOW: New 5x5 Dx,Dy Kernels

[Other]
- Bugs fix: StdDEV,StdDEV3

----------


## reexre

*Update 0.2.1524 (23-Mar-2016)*
[Nodes]
- NEW TEMP.: Temperature
- NEW VIBRANCE: Vibrance
- NEW CHROMAK: Chromakey blend
[Other]
- Nodes and Global ProgressBar


Update 0.2.1506 (07-Mar-2016)
[Nodes]
- NEW "HUE Harm": HUE Harmonizer
[Other]
- "Save Before & After" Check Button, to save both INPUT and OUTPUT in the same Picture.



CHROMAK -ChromaKey

----------


## reexre

*Update 0.2.1600 (01-May-2016)*
[Nodes]
- NEW Morpho: Morphological Erosion;Dialtion;Opening;Closing
- NEW Skeleton: Morphological Skeleton
[Other]
- Use MouseWheel to zoom in/out (Keep mouse Left-Button pressed)
- Use MouseWheel-Button Down to reset zoom to 1
- New Project Preview thumbnails.
- New Save Project Dialog.
- Small bug in Save Before & After
- Small bug of Progress Bars
- Small bug on Save Project


 *DOWNLOAD HERE* 
or from *SOFTPEDIA.COM*


*Take a Look at some Photo Effect that can be done.*

----------


## reexre

*Update 0.2.1615 (24-May-2016)*
[Nodes]
- NEW MIX2 x3: Mix 6 channels 2 by 2 same way as MIX2
- NEW VALUE3 : 3 Constant Values (in 1 node)
- NEW BLEND  : Mix the first-channel with the 2nd-channel by an amount given by 3th Input
- NEW BLEND3 : Mix the 3-first-channels with the 2nd-3-channels by an amount given by 7th Input 
[Other]
- New Button: Delete Project.
- If Node N-Inputs is greater that 3 draw it with bigger height.
- Minor UI restyle
- Small Bug Fix (Removed Screenshot)

 *DOWNLOAD HERE* 
or from *SOFTPEDIA.COM*

*Take a Look at some Photo Effect that can be done.*

----------


## reexre

*Update 0.2.1675 (18-Jul-2016)*
[Nodes]
- NEW ACE: Adaptive Contrast Enhancement
- NEW VRACE: Variable Radius Adaptive Contrast Enhancement
- NEW CannyEdge: Canny Edge Detector
- NEW OTSU: Otsu monochrome thresholder
- NEW EDGE: Edge by using magnituede of 5x5 Sobel operator
- NEW Stereo: Stereo Ananglyph (Create a Stereo Anaglyph image form 2 input images)
[Other]
- No more use of Cairo internal CalcArc funtion.

*Update 0.2.1652* (05-Jul-2016)
[Nodes]
- NEW LocalHE2: Local Histogram Equalization V2 (CLAHE): works on each pixel.
[Other]
- New DropDownList to select Output Filename Prefix/Postfix based on current used Project.
- Small Bug fix & optimization of HISTO Equ. HistoMATCH LocalHE VRCLAHE



 *DOWNLOAD HERE* 
or from *SOFTPEDIA.COM*

*Take a Look at some Photo Effect that can be done.*

----------


## reexre

:wave: 
Is Anybody There ?

----------


## Navion

I am following progress, well sort of. I find your filters much inspiring but the rest of the interface a bit less so. It's not as much a "criticizing" thing as much as a "not for me" kind of thing.

Keep up the good work. I wish you well with it in any which way possible.

----------


## reexre

@navion
Thanks

about interface what is that you don't like?
The "too much deep" knowledge required about RGB channels... colors spaces... the understandings of what a single node do.... ?
Or maybe the lack of "real-time" preview ?
Someone told me that it is too complex.
Yes maybe it is.. but my goal was the possibility for the user to create his custom-fx by using available nodes(FX).  Something like LEGO base bricks used to build something bigger and yes ...  more complex but with numerous possibility. Not like other softwares with simply some effects to apply in sequence.

PS even criticizing is not a problem and may be useful for me

----------


## Navion

My thoughts :

1- About bitmap filters : no matter what your code and interface, you just can not remove the trial-and-error method entirely out of the equation.

2-About graphics in general : if you do lots of it, chances are, one job after the other, each job requires a number of repetitive and specific steps.

3- About users : a casual user will probably enjoy a drag-drop-move-insert-effect-gadgety type of interface, because its cool and fun to play with. A power user on the other hand has these things in mind : productivity, repeatabilty, etc.

I cater mostly to the power user. In order to meet the goals of point 1 and 2 above, I feel a script language is more productive than a graphic visual interface trying to record and execute those steps. Writing and managing a complex interface requires a lot of time and effort. A script language, much less so.

Here is an example of such a script in my B2 program. The script is self explanatory but in a nutshell, it does the following : load a bitmap, enlarges it, vectorizes it, apply a texture, saves a large bitmap of the result. It then scales it down and make a comparison bitmap of the original and the scaled down version of the result. Then applies an invert filter and once again a comparison bitmap.

The script can be saved, modified, etc... etc.... It's a one-click thing to re-do the 19 steps of this job and results are automatically saved. That's my approach on graphics.

Here as screen shot of the working environment and the final comparison2 bitmap (saved as jpg)





As expected, the forum software does its usual job of scaling down my screen shot. Here's another pic that should show the script window better.

----------


## Schmidt

> Is Anybody There ?


Yep, I'm dropping by in this thread occasionally...

And - as Navion - I find your work on the Filters outstanding...



Also like some of your self-developed RC5-Widgets - especially the ones, which (in the 
bottom-right-corner of the above ScreenShot) are labelled: "Resistence" and "Tang Radius",
and how they behave when "clicked and dragged"...

Also great, that you finally ship the package without Setup, as a true portable App -
And altough I'd have perhaps choosen "a more conventional GUI-approach", it's always interesting 
to see a true creative at work - and what he comes up with, using the tools at hand - 
I think you are not wired for "conventional" - so don't attempt to be, and keep surprising us...  :Smilie: 

If you want to introduce Scripting-capabilities into your App (which I consider a great 
suggestion by Navion), you can do so quite easily now, since the newest RC5-binaries 
support ActiveScripting (without depending on the MS-Script-OCX).

BTW, your new updated Neuronal-Network-approach (on youtube) is amazing as well -
did you use the RC5 for the graphics-outputs there, too?

Keep it up Roberto.

Olaf

----------


## reexre

Due to my english-lacks I did not fully understand last Navion post.

Anyway talking about using scripts approach I made some tests:

First of all, thanks to Navion I created 2 new nodes called "Render" and "Render3"

"Render" Do Render 2nd input to 1st input at given Destination Coords and Size.
"Render3" Do Render 2nd inputs (RGB) triplet to 1st inputs (RGB) triplet at given Destination Coords and Size.
They have the possiblity to Invert Foreground (2st-Triplet) or Background (1st-Triplet)

So here there are some output Results:
Same as Navion:


Visual Project:


How should look script Project:



> A = INPUT  () Inputs[]
> 
> B = INPUT 2  (.\BackGrounds\GREEN.jpeg)    Inputs[]
> 
> C = Value  (0)    Inputs[]
> 
> D = Render3  (ThousandthPart, 0, 0, 500, 500, No Inversion)    Inputs[C.1, C.1, C.1, A.1, A.2, A.3]
> 
> E = MIX2 x3  (Overlay, 0, False)    Inputs[A.1, A.2, A.3, B.1, B.2, B.3]
> ...



Other Tests I made of "Render":
Split and render RGB Channels

Visual Project:


How should look script Project:



> A = INPUT  () Inputs[]
> 
> B = Value  (0)    Inputs[]
> 
> C = MIX 3  (wheighted SUM, 30, 58, 12)    Inputs[A.1, A.2, A.3]
> 
> D = Render  (ThousandthPart, 0, 0, 500, 500, No Inversion)    Inputs[B.1, A.1]
> 
> E = Render  (ThousandthPart, 500, 0, 500, 500, No Inversion)    Inputs[B.1, A.2]
> ...

----------


## reexre

Split and Render RGB channels as Gray

Visual Project:


How should look script Project:



> A = INPUT  () Inputs[]
> 
> B = Value  (0)    Inputs[]
> 
> C = MIX 3  (wheighted SUM, 30, 58, 12)    Inputs[A.1, A.2, A.3]
> 
> D = Render3  (ThousandthPart, 0, 0, 500, 500, No Inversion)    Inputs[B.1, B.1, B.1, A.1, A.1, A.1]
> 
> E = Render3  (ThousandthPart, 500, 0, 500, 500, No Inversion)    Inputs[D.1, D.2, D.3, A.2, A.2, A.2]
> ...



Warhol (wip):

Visual:

Script:



> A = INPUT  () Inputs[]
> 
> B = MIX 3  (wheighted SUM, 30, 58, 12)    Inputs[A.1, A.2, A.3]
> 
> C = Value3  (50, 100, 0)    Inputs[]
> 
> D = Otsu  () Inputs[B.1]
> 
> E = Render3  (ThousandthPart, 0, 0, 334, 334, No Inversion)    Inputs[C.1, C.1, C.1, C.1, D.1, D.1]
> ...

----------


## reexre

Visual:


Script:



> A = INPUT  () Inputs[]
> 
> B = Value3  (100, 80, 30)    Inputs[]
> 
> C = Value3  (100, 30, 10)    Inputs[]
> 
> D = Formula  ((-H+1.005)*0.5)    Inputs[A.1]
> 
> E = Formula  ((W+1)*0.5)    Inputs[A.1]
> ...




I'm still not sure that a Scrip-Language should be easier and more productive...
Because:
 -With my visual approach, for complex Projects usually it's easyer to follow and understand the Data-Flow.
 -My approach works on single channels not RGB-triplets at one time.
 -Most of my developed nodes have a number of Parameters to set.


Many thanks for the encouragement Olaf!
Yes my 2D stick creature evolution final render is made with RC5
Download Here:
https://miorsoft.github.io/Site/index.html

----------


## Navion

There are pros and cons to everything. While I do agree your node-GUI is the right thing for your program, is does not necessarily means a script approach is exclusive. These are issues that each of us programmers have to make decisions about. In the early stages of my project, a script language was essential as it could help me performs steps ahead of GUI implementation. Things are a bit different now. I pump up bitmap filters routines faster than I can keep the script language current.

Yet this thread served a useful purpose for me and that is about making my script language as current as the GUI is in order to avoid backlog of the script language. I'll be more vigilant in that regard from now on. The main problem is about choosing keywords that will be simple and allow recognition for the hundreds of bitmap filters already implemented.

All the filters were there, it took me about 20 minutes to update the script language to produce this image from a script. That was easy wasn't it? Well yes and no. I choose keywords as they came to mind. This now has to be rationalized further. Besides, while the script works, it sure is not optimal and needs to be reviewed further to be more compact and comprehensive. Lots of new ideas on how to make it faster, better.



```
bitmap maradona
grayscale
copy
bitmap maradona
paste bottom
save maradona1

bitmap maradona
channel red
save maradonared

bitmap maradona
channelgray red
copy
bitmap maradonared
paste bottom
save maradona2

bitmap maradona
channel green
save maradonagreen

bitmap maradona
channelgray green
copy
bitmap maradonagreen
paste bottom
save maradona3

bitmap maradona
channel blue
save maradonablue

bitmap maradona
channelgray blue
copy
bitmap maradonablue
paste bottom
save maradona4

bitmap maradona2
copy
bitmap maradona1
paste right
save maradonaALL

bitmap maradona3
copy
bitmap maradonaALL
paste right
save maradonaALL

bitmap maradona4
copy
bitmap maradonaALL
paste right
save maradonaALL
```



Edit. From same script, things are easy.



(Low quality because forum shrunk down jpg's)

----------


## reexre

*Many New Stuff on V0.3* 
*DOWNLOADS*

SoftPedia ZIP
ZIP
ZIP Lite
Self Extractor
Self Extractor Lite


Update 0.3.60 (12-Sept-2016)
[Nodes]
- New RENDER: Draw 2nd channel (Foreground) to the 1st Input (Background) at a given position and size
- New RENDER3: Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at a given position and size
- New RENDERex: Draw 2nd channel (Foreground) to the 1st Input (Background) at given 4 Corners position
- New RENDER3ex: Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at given 4 Corners position
- New MAP: Map input range to a new range given by NewMin and NewMax (Using Input Min & Max Values)
- New MAP3: Like Map for 3 Channels
- New THINNING: ZhangSuen Thinning
- New BLUR3: Gaussian Blur 3 Channles
- New CURVE9: Simple 9Points Spline Curve transformation (X at every 1/8)
- New MUL3: Multiply 3 Channels by 3 given values expressed as percentage
- New LocalMAP: Similar to Map but Locally. WIP!
- OTSU: from 2 Levels (Monochrome) to Multilevels (Max 5)
[Other]
-DPI-Aware GUI (to Zoom Use MouseWheel+CNTRL)
-While Zooming keep Node-Parameters-Container at same screen position
-Keep same Zoom factor at Program Restart (Settings.ini - File)
-Option to see every Node Output by clicking it
-Experimental auto-connect nodes on New Node MouseUp-event
-Auto Set Default Parameters Values when adding new Node
-Node Parameters tweaker: Diplay more than 6 parameters
-LocalHE2: Changes (Mainly ClipLevel parameter scale)
-BLUR: Bug fix (Picture Borders) and optimization
-ACE: Revisited
-VRACE: Revisited
-Portable Self-Extractor Executable Version (Full/Lite)
-Use of CopyMemory (Faster Inter-Nodes Data transfer. Faster Node that have N of Iterations param.)
-UC TextUpDown allows negative values
-Use More Standard MousePointers
-New "Support" Folder


*OTSU* - Nobuyuki Otsu Multi-level Thresholding 
Original

2 Levels (0-1)

3 Levels (0-0.5-1)

4 Levels (0-0.33-0.66-1)

5 Levels (0-0.25-0.5-0.75-1)

----------


## reexre

*THINNING*: ZhangSuen Thinning


*RENDERex*, *RENDER3eX*

----------


## reexre

*DPI Awareness*



*See Every node Output*



*AutoConnect*

----------


## reexre

*DOWNLOADS*

SoftPedia ZIP
ZIP
ZIP Lite
Self Extractor
Self Extractor Lite

----------


## reexre

What will be new in future Update:


New Node *SPLIT* / *SLPIT3*
Useful to process stereo Images:

Example:
Original

[STEREOwSPLIT.txt]



New Node *SPINBLUR(3)*
Original:

Various SpinBlur:

----------


## reexre

*Yxy* colorspace
Desaturate

Saturate


Pixel *Sorting*

----------


## reexre

*HeatMap*
**

----------


## reexre

*OilPaint*
Attachment 142217Attachment 142219
*Chromaticity*
Attachment 142221

----------


## reexre

*LocalOTSU*
Attachment 142225

With other effects:  (Project [5TonesAndColorsSLOW.txt])
Attachment 142223

----------


## reexre

....  Some Other Example with -5TonesAndColorsSLOW.txt- project

----------


## reexre

What will be New:

[Nodes]
-New Split: Split Channel in 2 halfs (useful for stereo images)
-New Split3: Split 3channels image in 2 halfs (useful for stereo images)
-New POW3: Power of 3 Channels (Like Pow)
-New SpinBLUR: Spin Blur
-New SpinBLUR3: Spin Blur 3 channels
-New RGB>Yxy: RGB to Yxy colorspace conversion
-New Yxy>RGB: Yxy to RGB colorspace conversion
-New HeatMap: Grayscale to HeatMap(rgb)
-New Sorting: Pixel Sorting effect.
-New Solarize: Classic Solarization Filter
-New Solarize3: Classic Solarization Filter
-New OilPaint: Classic OilPainting
-New OilPaint3: Classic OilPainting (RGB)
-New Chroma: Chromaticty colorspace conversion
-New LocalTHR: Local Threshold Binarization
-New LocalOTSU: Experimental Local Otsu
-DoG: Picture borders fix (Call 2 Blurs instead of in-built blurs)
-HSL: Colorspace conversion added: Darel Rex Finley "HSP"
-StdDEV, TODO StdDEV3: Revisited
[Other] 
-Small bug fix of "Keep same Zoom factor at Program Restart" in some systems.
-Allow more than 3 outputs for Nodes (max 6)
-Fix missing "Background" Folder in Package(s)
-New PopUp-Message Widget.
-Small Interface restyles

----------


## reexre

*UPDATED*

 :Smilie: 
*DOWNLOADS*

SoftPedia ZIP   (may take some days to be updated)
ZIP
ZIP Lite
Self Extractor
Self Extractor Lite

*WebPage*

----------


## reexre

*UPDATED*

 :Smilie: 
*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*
*- Self extracting Exe*

No more use of "Full" and "Lite" Versions of PhotoModularFX.
Just 1 version plus a self-extracting archive file (*Thumbs.exe*)  with all projects thumbnails to extract in "\PhotoModularFX\Projects\" folder.


*What's new:
Update 0.3.400 (05-Apr-2017)*

[Nodes]
-INPUT2 added Alpha-Channel node output.
-New INPUTA: Main Input Photo RGB+Alpha Channel
-New PowEx3: Extended Pow (3 channels)
-New DCTEqu: Discrete Cosine Transform Equalizer
-New Normalize: Reset Mean and Variance
-New Normalize3: Reset Mean and Variance
-New LocalNorm.: Local Reset Mean and Variance
-New ClrMatrix: 3x3 Color Matrix
-New RGB>CMYK Colorspace conversion
-New CMYK>RGB Colorspace conversion
-New Palettize: Single Channel to RGB palette using Cos function.
-New Suppress: Cut values between a threshold 
-New Voronoi: Voronoi Tassellation
-New Extent Extent3 & Extent4: Extent/Matting Canvas
-Kmean123D: Optimization (Damping) 
-KuwAniso: Fixing and speed Improvement.
-StdDEV & StdDEV3: Improvements
-Faster ThrBLUR ThrBLUR3 and Bilateral:added Uniform Poisson Disk space-kernel (for big radii)
-Mix3: New Mixmodes: Min;Max;Gray Desaturation;Gray BT.601;Gray BT.709; Gray BT.2020;Abs Greater;Abs Smaller
-Mix2: New mixmodes: SmoothMin;SmoothMax;Abs Greater;Abs Smaller
-xPois: Improvements
[Other] 
-Some Icons restyles
-Bug fix of autoconnect (on no-connections project)
-Bug fix on 5x5 sobel kernel (FLOW)
-Small Bug fix on ProgressBar (1../20)
-Faster Startup (Delay "CC" creation to when it's needed)
-Widget TextUpDown little restyle
-Updated vbRichClient's vbWidgets 
-Added Load GIF and SVG formats
-DoubleClick Editor to Switch FullScreen mode (On/Off)
-Nodes tooltips: Added Input/Output Pins description.
-Added WindowHandle to LoadImage Dialog (Form.hWnd)

----------


## reexre

*UPDATED*

 :Smilie: 
*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*
*- Self extracting Exe*


Self-extracting archive file (*Thumbs.exe*)  with all projects thumbnails to extract in "\PhotoModularFX\Projects\" folder.


*Update 0.3.462 (15-Sep-2017)*
[Nodes]
-New: CubicBezier: Cubic Bezier through 2 given points transform.
-New: LocalHE3: Local Histogram Equalization (CLAHE) on 3 channels at one time.
-ThrBlur; ThrBlur3: Optimization (Do not recreate Poisson Disks)
-VRLCN: New variance computation algo.
[Other] 
-FLOW: Improved Smooth Algo
-CannyEdge: Little improvement
-Kmean123D: New algorithm for initial centroids selection: (Kmean++)
-Updated vbRichClient's vbRC5BaseDlls
-PoissonDisk: Applyed Box Muller Transform Distribution
-PopUp Messages: Little Fix
-Fonts: some tweaks
-Nodes tooltip: better (removed newlines)
-Zoom: Smoother

----------


## reexre

Using *VideoExtractEncode*(Portable) (Download it here:https://miorsoft.github.io/Site/index.html)

You can create Videos

----------


## reexre



----------


## reexre



----------


## reexre

*UPDATED*

 :Smilie: 
*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


No more use of "Full" and "Lite" Versions of PhotoModularFX.
Just 1 version plus a self-extracting archive file (*Thumbs.exe*)  with all projects thumbnails to extract in "\PhotoModularFX\Projects\" folder.


*What's new:
Update 0.3.580(18-Dec-2017)*
[Nodes]
-NEW: Stretch;Stretch3: Histogram Stretch.
-NEW: ToneMap,ToneMap3: Tone Mapping for 1 and 3 channels.
-Blur;Blur3: Added BOX blur Algo.
-StdDEV;stdDEV3 (Standard Deviation): Really a lot Faster
-LocalHEii: Little faster
-VRCLAHE: Algo retouch
-BilaOAEX: Pyramids without cairo
-Normalize;Normalize3: Now output range can be not clamped 0-1
-MtBlur;MtBlur3: small bug fix
-Ramp: Bug fix on RepatMode:Standard (Left-Right;Up-Down)
-RGB>HSL;HSL>RGB: Added HSV colorspace conversion.
[Other] 
-Sound: Added checkbox to turn "ready output" sound on/off.
-GUI: Little restyles, lighter nodes and draw speedup.

----------


## reexre

*UPDATED*

 :Smilie: 
*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Whats new on Update 0.3.783 (21-Feb-2018)*

[Nodes]
-NEW: CAIR: Content Aware Image Resize.
-NEW: Plastic: Plastic Wrap Effect.
-NEW: Crop: Crop Top-Bottom Left-Right
-NEW: xPainter: experimental 'Painter effect'
-NEW: xBiro: experimental 'curve effect'
-NEW: xChord: experimental 'chord effect'
-NEW: Sauvola: Sauvola thresholding
-Render3: Allow different sizes between input triplets.
-RGBtweak Renamed to ADD3
-xPOIS: Added 'Source' background
[Other]
-Download latest version if available (click "u" button)
-Import project from Picture: Small bug fix (getProjectAsString)
-Custom Checkbox and DropDown: Right click for Default Value
-Project Description: Allowed all chars but ","

----------


## reexre

*CAIR*
Content Aware Image Resize (Seam carving algorithm)
Original

Result:

----------


## reexre

*Plastic Wrap*

----------


## reexre

*xPainter*

----------


## reexre

*xBiro*

----------


## reexre

What do you think about this "flat" - GUI ?

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Whats new on Update 0.3.834 (01-Mar-2018)*
[Nodes]
[Other]
-Removed update (download latest version)
-New "Flat" faster GUI

----------


## reexre

coming soon ....

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Whats new on Update 0.3.910 (26-Mar-2018)*
[Nodes]
-New: Mean : Arithmetic Harmonic Contraharmonic and Geometric mean
-New: Mean3: Arithmetic Harmonic Contraharmonic and Geometric mean (3 channel)
-New: Invert3: Invert 3 channels out=(1-In)
-New: vMotion: Video Motion Blur
-Mix3: Added Gray HSP and PS-like
-ADD & ADD3 added clamp 0-1 option
-Ramp: Small bug fix
-POW: Small bug fix
[Other]
-Auto check for Updates.
-Save "Resize mode" on Settings.ini
-Custom message box
-Node Setting's Auto Apply (Removed "Apply" button)
-Dark gray GUI

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1040 (20-Apr-2018)*
[Nodes]
-New: FormulaRGB: 3 Output Formulas having 3 inputs.
-New: NNart: Experimental Neural Network Reconstruction.
-New: QuantGNG3: Experimental Growing Neural Gas Quantizer.
-Formula; Formula2; Formula3: A lot faster performance and new inputbox.
-RGBscreen: Revisited to look more like a CRT Screen.
[Other]
-Bug fix on Save Project with "Project Filter" Activated

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1073 (06-jun-2018)*
[Nodes]
-New: Mix3W: Mix 3 channels by 3 weights
-New: Technicolor: 2-Strip & 3-Strip Techincolor effect.
-MIX2: New option to clamp output between 0-1
-Pow; Pow3: Option to manage negative input this way: out = Sgn(in)*Abs(in)^Pow
-SNN; SNN3: Algorithm review.
[Other]
-vbRichClient: Newest Version 5.0.66
-Bug Fix: Crash on DropDownList Click


Example of Cartoonization Style (Autoscope) effect you can do with PhotoModularFX

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1100 (24-jun-2018)*
[Nodes]
-NEW: ColorContrast: Make Lighter choosen hue and darker complementary hue (inspired by Luminar) 
[Other]
-Auto Adapt screen zoom to current screen DPI
-Animated connections on node click
-Icon minor change

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1102 (25-jun-2018)*
[Nodes] 
-NEW: SmoothMM: Smooth Min/Max
[Other]
-Bug fix on check for updates

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1114 (03-jul-2018)*
[Nodes] 
[Other]
-Mousewheel support on Picker Valueinput and Slider
-Mousewheel fix on "Add Node/FX"
-Second Click's issue solved on "Add Node/FX"
-Load Project on FileList Keyboard up/down Arrows (ScrollIndexChange)

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1153 (01-ago-2018)*
[Modules] 
-Blur; Blur3; Fast Mode
-ToneMap; ToneMap3; LocalMap; DoG; Noise2; PlasticWrap; -Faster (because of Internal faster Blur)
-PlastWrap: Changed 'Details' parameter (Now proportional to image size)
-RGB2HCY and HCY2RGB: reviewed colorspaces conversion algorithm
-EDGES: Reviewed algorithm
[Other]
-Added 'Add FX-Node Selector' Window
-Added Projects-Thumbs Preview. +50 MBytes
-Renaming 'Node' to 'Module'

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1153 (01-ago-2018)*
[Modules] 
-Blur; Blur3; Fast Mode     Many thanks to Tanner Helland 
-ToneMap; ToneMap3; LocalMap; DoG; Noise2; PlasticWrap; -Faster (because of Internal faster Blur)
-PlastWrap: Changed 'Details' parameter (Now proportional to image size)
-RGB2HCY and HCY2RGB: reviewed colorspaces conversion algorithm
-EDGES: Reviewed algorithm
[Other]
-Added 'Add FX-Node Selector' Window
-Added Projects-Thumbs Preview. +50 MBytes
-Renaming 'Node' to 'Module'

----------


## reexre

This algorithm will be included in the next update. (for the truth already present but not working)

The module is: *xChord*

After a few attempts, I finally managed to implement the algorithm to create images like those of Petros Vrellis.
http://artof01.com/vrellis/index.html

This video was of fundamental help. https://www.youtube.com/watch?v=-S_l8GGxOhU

They consist of a series of nails placed in a circle, and of a single string passing through them.

In addition to creating images, the algorithm will create the necessary instructions to create a real one (made of nails and string).

Here are some examples:



Example of Build Instructions (referring to 1st pic):


```
Number of Nails: 360
Nails coords in a circle: 
N 1    X: 0.500    y: 0.000
N 2    X: 0.500    y: 0.009
N 3    X: 0.500    y: 0.017
N 4    X: 0.499    y: 0.026
N 5    X: 0.499    y: 0.035
N 6    X: 0.498    y: 0.044
N 7    X: 0.497    y: 0.052
N 8    X: 0.496    y: 0.061
N 9    X: 0.495    y: 0.070
N 10    X: 0.494    y: 0.078
...
N 357    X: 0.499    y: -0.035
N 358    X: 0.499    y: -0.026
N 359    X: 0.500    y: -0.017
N 360    X: 0.500    y: -0.009

NAIL SEQUENCE:
Step       Nail
00001       1
00002       343
00003       354
00004       353
00005       350
00006       348
00007       347
00008       357
00009       337
00010       340
....................
03800       50
03801       54
03802       144
03803       143
03804       142
03805       143
03806       44
03807       177
03808       52
03809       1
03810       360
03811       62
03812       309
03813       157
03814       222
03815       140
03816       270
End Sequence.

String Length (For a Diameter of 1 meter) :2414.951 Meters

MAX Number of string passes 24 at Nail 264
Average Number of string passes per nail 10.6
Number of string passes per nail: 
Nail      Passes 
N 1  -  13
N 2  -  10
N 3  -  11
N 4  -  12
N 5  -  12
N 6  -  12
N 7  -  10
N 8  -  14
N 9  -  14
N 10  -  12
N 11  -  19
...............
N 350  -  20
N 351  -  17
N 352  -  18
N 353  -  18
N 354  -  20
N 355  -  12
N 356  -  17
N 357  -  19
N 358  -  8
N 359  -  15
N 360  -  10

Parameter used:
75
360
2
0
```

To build a real one much depends on the diameter you want to use and the thickness of the string.
For this reason this algorithm could still be subject to improvements.

----------


## reexre

Summary of Modules Included:

01   IO             0:3  INPUT          The Loaded Picture
02   IO             0:4  INPUT2         Secondary support Input picture      
03   IO             0:4  INPUTA         The Loaded Picture with Alpha Channel
04   IO             3:0  OUTPUT         The Output (saved as Jpg Picture). If you need Alpha channel use PNGout Module 
05   IO             4:0  PNGOUT         Save as PNG

01   ColorSpace     3:3  CHROMA         Chromaticity Space, No Intensity information. (Also called Normalized RGBs) 
02   ColorSpace     4:3  CMYK>RGB       Convert CMYK (Cyan, Magenta, Yellow, Black) colorspace to RGB       
03   ColorSpace     3:3  HCY>RGB        Convert HCY (hue-chroma-Luma) colorspace to RGB Color space
04   ColorSpace     3:3  HSL>RGB        Convert HSL (Hue, Saturation, Luminance) to RGB colorspace with quasimondo.com , STANDARD ,  'Darel Rex Finley HSP' algorithm or HSV       
05   ColorSpace     3:3  LAB>RGB        Convert Lab colorspace to RGB Color space
06   ColorSpace     3:4  RGB>CMYK       Convert RGB colorspace to CMYK (Cyan, Magenta, Yellow, Black)       
07   ColorSpace     3:3  RGB>HCY        Convert RGB colorspace to HCY (hue-Chroma-Luma) Color space - For simplicity consider it as  HSL 
08   ColorSpace     3:3  RGB>HSL        Convert RGB colorspace to HSL (Hue, Saturation, Luminance) with quasimondo.com , STANDARD ,  'Darel Rex Finley HSP' algorithm or HSV      
09   ColorSpace     3:3  RGB>LAB        Convert RGB colorspace to Lab Color space
10   ColorSpace     3:3  RGB>XYZ        Convert RGB colorspace to XYZ      
11   ColorSpace     3:3  RGB>YUV        Convert RGB colorspace to Y'UV  Y(Luma)UV (PAL), YCbCr or YIQ (NTSC)      
12   ColorSpace     3:3  RGB>YXY        Convert RGB colorspace to Yxy     
13   ColorSpace     3:3  TECHNICOLOR    Simulate old 2-strip and 3-strip technicolor films        
14   ColorSpace     3:3  XYZ>RGB        Convert XYZ colorspace to RGB      
15   ColorSpace     3:3  YUV>RGB        Convert Y'UV (PAL) , YCbCr or YIQ (NTSC) Colorspace to RGB      
16   ColorSpace     3:3  YXY>RGB        Convert Yxy colorspace to RGB     

01   Blend          3:1  BLEND          Blend - Mix the first-channel with the 2nd-channel by an amount given by 3th Input 
02   Blend          7:3  BLEND3         Blend 3 - Mix the 3-first-channels with the 2nd-3-channels by an amount given by 7th Input 
03   Blend          2:1  MIX2           Mix 2 channels
04   Blend          6:3  MIX2X3         Mix 6 channels 2 by 2 same way as MIX2 (First 3 Inputs as RGB-1 and 2nd 3 Inputs as RGB-2) 
05   Blend          3:1  MIX3           Mix 3 channels
06   Blend          6:1  MIX3W          Mix 3 inputs (1-2-3) by 3 weights (4-5-6)  

01   Resize         3:3  CAIR           Content Aware Image Resize.  Seam Carving algorithm (Experimental)      
02   Resize         3:3  CROP           Crop Image (Use Carefully, watch out 2D connections sizes)     
03   Resize         1:1  EXTENT         Extent Canvas      
04   Resize         3:3  EXTENT3        Enlarge Canvas      
05   Resize         4:4  EXTENT4        Enlarge Canvas      
06   Resize         1:1  SIZE2X         Resize Width and Height by 2X      
07   Resize         1:1  SIZEHALF       Resize Width and Height by Half    

01   Threshold      1:1  LOCALOTSU      Experimental Local Nobuyuki Otsu Multi-level Thresholding (Faster with Bigger Radius since Thresholds are interpolated)      
02   Threshold      1:1  LOCALTHR       Local Threshold (Imocha Singh)    
03   Threshold      1:1  OTSU           Nobuyuki Otsu Multi-level Thresholding      
04   Threshold      1:1  SAUVOLA        Sauvola Thresholding (Global or Local)     
05   Threshold      1:1  SUPPRESS       'Cut' values between thresholds  ( Soft Thresholding )      

01   Blur           1:1  BILAOA         Orientation-Aligned Bilateral Filter  (WIP)      
02   Blur           1:1  BILAOAEX       Extended Orientation-Aligned Bilateral Filter  (WIP)      
03   Blur           1:1  BILATERAL      Edge preserving smoothing filter.     
04   Blur           1:1  BLUR           Gaussian/Box Blur
05   Blur           3:3  BLUR3          3 Channels Gaussian/Box Blur
06   Blur           1:1  KUWAHARA       Non-linear smoothing filter that preserves edges  
07   Blur           1:1  KUWANISO       Anisotropic Kuwahara     
08   Blur           1:1  MEDIAN         Median Filter     
09   Blur           1:1  MTBLUR         Motion BLUR (1 channel)
10   Blur           3:3  MTBLUR3        Motion BLUR 3 channels
11   Blur           3:1  PAINT          Set first 2  Input as Outputs of FLOW, and 3th as Source to 'paint' to
12   Blur           1:1  SNN            Symmetric Nearest Neighbour (Edge Preserving Smoothing)      
13   Blur           3:3  SNN3           RGB Symmetric Nearest Neighbour (Edge Preserving Smoothing)      
14   Blur           1:1  SPINBLUR       Spin Blur      
15   Blur           3:3  SPINBLUR3      Spin Blur (3 channels)     
16   Blur           1:1  THRBLUR        Threshold Gaussian Blur
17   Blur           3:3  THRBLUR3       Threshold Gaussian Blur, 3 channels
18   Blur           3:3  VMOTION        Video Motion blur. Use only with videos frames      
19   Blur           1:1  ZMBLUR         ZOOM BLUR (1 channel)
20   Blur           3:3  ZMBLUR3        ZOOM BLUR 3 channels

01   Misc           1:2  FLOW           Calc Gradient Flow - Outputs 1-Magnitude, 2-Angle (Range 0-1)
02   Misc           2:1  HUE-HARM       HUE Harmonizer (Input 1 = HUE, Input 2 = Saturation)     
03   Misc           3:3  LENS           Camera Distorsion     
04   Misc           3:3  MAGNIFIER      Magnifier Glass    
05   Misc           3:3  PLASTICWRAP    Plastic Wrap Effect    

01   Art            3:3  MOSAIC         WIP       
02   Art            3:3  NNART          Experimental Neural network reconstruction  (SLOW!)    
03   Art            1:1  OILPAINT       Oil Painting classic effect     
04   Art            3:3  OILPAINT3      Oil Painting classic effect (3Channels)    
05   Art            1:1  PENCIL         Pencil Drawing    (Still Developing) 
06   Art            3:3  PHOTOMOSAIC    WIP DO NOT USE !!!! Tile Photo Mosaic Artwork   (WIP)       
07   Art            3:3  PIXELATE       Pixelate
08   Art            3:3  SKETCH         Sketch style Abstraction on RGB channels      
09   Art            1:1  STIPPLING      Stippling (static)    
10   Art            3:3  VORONOI        Experimental Voronoi Tassellation     
11   Art            1:1  XBIRO          'Messy curve Biro Draw Effect'      
12   Art            3:1  XCHORD         'Chord Effect'      
13   Art            1:1  XMESH          Creates a Mesh by selecting the most relevant points and drawing them according to proximity       
14   Art            3:3  XPAINTER       Painter Effect      
15   Art            3:3  XPEN           Experimental Pencil         
16   Art            3:3  XPOIS          Experimental Pois Art        
17   Art            3:3  XSTROKES       Experimental Art-Draw Strokes    

01   Histogram      1:1  HISTOEQU.      HISTOGRAM Equalization. (CLHE - Contrast Limited Histogram Equalization)
02   Histogram      2:1  HISTOMATCH     Histogram Matching - Change Input1 to match Input2 Histogram
03   Histogram      1:1  LOCALHE        Local Histogram Equalization   (CLAHE - Contrast Limited Adaptive Histogram Equalization) 
04   Histogram      3:3  LOCALHE3       3 channels Local Histogram Equalization   (CLAHE - Contrast Limited Adaptive Histogram Equalization) 
05   Histogram      1:1  LOCALHEII      Local Histogram Equalization[2]   (CLAHE - Contrast Limited Adaptive Histogram Equalization) for each pixel
06   Histogram      1:1  STRETCH        Histogram Contrast Stretch 
07   Histogram      3:3  STRETCH3       Histogram Contrast Stretch (3 channels) 

01   Contrast       1:1  ACE            Adaptive Contrast Enhancement      
02   Contrast       1:1  ADV.LC         Advanced Local Contrast (Still developing.. ) 
03   Contrast       3:3  COLORCONTRAST  Color Contrast:   Make Lighter choosen hue and darker complementary hue (inspired by Luminar)     
04   Contrast       1:1  LCN            (Local) Contrast Normalization  - Set Radius to 0 to do a Global Contrast Normalization      
05   Contrast       1:1  LCONTRAST      Set Radius 
06   Contrast       1:1  VRACE          Variable Radius Adaptive Contrast Enhancement      
07   Contrast       1:1  VRCLAHE        Variable Radius CLAHE (a sort of Fake HDR) - Very slow, since for each pixel is done a Contrast Limited Histogram Equalization using its pixel neighbour window    
08   Contrast       1:1  VRLCN          Variable Radius Local Contrast Normalization (WIP)      

01   Mapping        1:1  CUBICBEZIER    CubicBezier through 2 given points 
02   Mapping        1:1  CURVE          Simple 5Points Spline Curve transformation (X at every 1/4)        
03   Mapping        1:1  CURVE9         Simple 9Points Spline Curve transformation (X at every 1/8)        
04   Mapping        1:1  LOCALMAP       Local Map range using Input Min and Max range values mapped to New Min and New Max Values.   [0 - 100] = NORMALIZE     (Output not Clamped)
05   Mapping        1:1  LOCALNORM      Change Local mean and variance to defined values      
06   Mapping        1:1  MAP            Map range using Input Min-Max range values mapped to New Min and New Max Values.   [0 - 100] = NORMALIZE   (Output not Clamped)
07   Mapping        3:3  MAP3           Map range using Input Min and Max range values mapped to New Min and New Max Values.    [0 - 100] = NORMALIZE    (Output not Clamped)
08   Mapping        1:1  NORMALIZE      Image Normalization: Change global mean and variance to defined values      
09   Mapping        3:3  NORMALIZE3     Image Normalization: Change 3Channels global mean and variance to defined values      
10   Mapping        1:1  TONEMAP        Tone Mapping Single channel (Use ToneMap3 for all RGB channels)        
11   Mapping        3:3  TONEMAP3       Tone Mapping (3 channels)       

01   Math           1:1  ADD            Add a constant Value to Input  
02   Math           3:3  ADD3           Add/Sub RGB Values  (it can be used even with other channels types)
03   Math           1:1  CLAMP01        Clamp channel values between 0 and 1 - The Outputs of some modules can be outside of 0-1 range     
04   Math           3:3  COLORMATRIX    Color Matrix      
05   Math           1:1  EXP-LOG        Perform Exp() or Log() function. More precisely: EXP=(Exp(x)-1)/(Exp(1)-1), LOG=Log(x*(Exp(1)-1)+1) 
06   Math           1:1  FORMULA        Formula - Custom Formula ...        
07   Math           2:1  FORMULA2       Formula2 - 2 inputs Custom Formula ...        
08   Math           3:1  FORMULA3       Formula3 - 3 inputs Custom Formula ...        
09   Math           3:3  FORMURGB       FormulaRGB - 3 inputs 3 Outputs Custom Formulas        
10   Math           1:1  INVERT         Invert a channel: Output = 1 - Input
11   Math           3:3  INVERT3        Invert 3 channels: Output = 1 - Input
12   Math           1:1  MEAN           Arithmetic Harmonic Contraharmonic and Geometric mean 
13   Math           3:3  MEAN3          Arithmetic Harmonic Contraharmonic and Geometric mean 
14   Math           1:1  MUL            Multiply by a Value (base 0.5 means an X shift by -0.5)
15   Math           3:3  MUL3           Multiply 3 channels by a Value (base 0.5 means an X shift by -0.5)
16   Math           1:1  POW            Standard Power  
17   Math           3:3  POW3           Standard Power on 3 Channels  
18   Math           1:1  POWEX          Hi values decrease contrast, Low Values Increase Contrast - Special Kind of Power function (see PDF)
19   Math           3:3  POWEX3         Hi values decrease contrast, Low Values Increase Contrast - Special Kind of Power function (see PDF)
20   Math           2:1  SMOOTHMM       Smooth Min/Max     
21   Math           1:1  SMOOTHST       Smooth Step (Threshold)
22   Math           1:1  STDDEV         Standard Deviation          
23   Math           3:3  STDDEV3        Standard Deviation 3         
24   Math           0:1  VALUE          A constant Value (No input, only 1 output)
25   Math           0:3  VALUE3         3 constant Values (No input, only 3 outputs)

01   Quantize       1:1  K-MEAN1D       Set N of Clusters
02   Quantize       2:2  K-MEAN2D       Set N of Clusters
03   Quantize       3:3  K-MEAN3D       Set N of Clusters
04   Quantize       3:3  QUANTGNG3      Growning Neural Gas Quantization       
05   Quantize       1:1  QUANTIZE       Simple quantization     

01   Unknown        3:3  8COLORS        Retro 8Colors style
02   Unknown        1:1  AUS            developing/testing pourpose  WIP! DO NOT USE!     
03   Unknown        3:3  BCS            Brightness Contrast Saturation  (RGB)      
04   Unknown        1:1  BORDERS        Darker Borders /  Vignetting     
05   Unknown        1:1  CANNYEDGE      Canny Edge Detector (WIP)
06   Unknown        1:1  CARTMEV2       perform an Effect similar to LC (but separable) taken from an old program 
07   Unknown        6:3  CHROMAK        Chromakey Blend (1st 3 inputs: Main Image, Last 3 Input: BackGround Image)  (The replacement is based on RGB-replace Hue)  
08   Unknown        1:1  CORNERS        SUSAN corner detection    WIP! DO NOT USE   
09   Unknown        1:1  DCT-BP         EXPERIMENTAL Discrete Cosine Transform Band Pass    
10   Unknown        1:1  DCTEQU         Discrete Cosine Transform Equalizer    
11   Unknown        1:1  DCTFX          EXPERIMENTAL Discrete Cosine Transform FX    
12   Unknown        1:1  DIFFUSION      Iso/Anisotropic Diffusion       
13   Unknown        2:1  DISPARITY      Disparity Map WIP   
14   Unknown        1:1  DISTORTION     DISTORT, a set of spatial Deform algorithm (Rotate Too)   
15   Unknown        1:1  DITHERING      Error Diffusion Dithering
16   Unknown        1:1  DOG            Difference of Gaussians  (R2=R*2) 
17   Unknown        1:1  DOGBYF         Flow based DoG (Difference of Gaussians)
18   Unknown        1:1  EDGES          Edges detector (Sobel Magnitude)
19   Unknown        1:3  EXPER1         Just a Experimental function      
20   Unknown        1:1  FAKEHDR        HDR tone Mapping. VERY SLOW. Deprecated. Instead use 'ToneMap' FX      
21   Unknown        1:1  FAKEHDR2       Fake HDR2 Experimental       
22   Unknown        1:1  FAKEHDR3       Fake Hdr Durand (Known as ToneMap Durand)       
23   Unknown        1:1  FFTTEST        EXPERIMENTAL fft Not Ready!  
24   Unknown        1:1  FLIP           Horizontal Vertical & Both Flip/Mirror     
25   Unknown        3:3  FLIP3          Horizontal Vertical & Both Flip/Mirror     
26   Unknown        1:2  FLOW2          Calc Gradient Flow - Outputs 1-Magnitude, 2-Angle (Range 0-1)
27   Unknown        1:4  FLOWEX         EXPERIMENTAL DO NOT USE ! Extended FLOW      
28   Unknown        1:1  GAMMA          Forward / Inverse Gamma Correction     
29   Unknown        3:3  GAMMA3         RGB Forward / Inverse Gamma Correction     
30   Unknown        1:1  GLASS          Glass effect (1 Channel)       
31   Unknown        3:3  GLASS3         Glass effect (3 Channels)       
32   Unknown        1:1  GLOW           Glow Effect [Look projects 'Glow Constructed...' ] (also colled specular Bloom)     
33   Unknown        1:1  HALFTONE       Halftone     
34   Unknown        1:1  HATCHING       Hatching-Stipple  - Still developing     
35   Unknown        3:3  HAZE           Create Haze   
36   Unknown        1:3  HEATMAP        Garyscale to HeatMap   
37   Unknown        4:3  HMAPD          Height Map Deform. Deform by Heightmap (4th input as heightmap)       
38   Unknown        3:3  LCD-DISP.      LCD Display Effect    
39   Unknown        1:1  MORPHO         Morphology       
40   Unknown        0:1  NOISE          NOISE - Fractional Brownian Motion 
41   Unknown        0:1  NOISE2         Noise 2nd -  Generate Noise tweaking 3 layers parameter      
42   Unknown        1:1  NOISER         Spatial Deform by Noise (Fractional Brownian Motion)   
43   Unknown        1:1  OFFSET         Horizontal Vertical Offset    
44   Unknown        3:3  OFFSET3        Horizontal vertical Offset    
45   Unknown        1:3  PALETTIZE      Single channel to RGB Palette using Cos functions       
46   Unknown        1:1  PYRAMIDD       Pyramid Based Level-Details Enhancement / Reduction
47   Unknown        3:3  PYRAMRGB       Pyramid Based Level-Details Enhancement / Reduction
48   Unknown        0:1  RAMP           Gradient Ramp     
49   Unknown        2:1  RENDER         Draw 2nd channel (Foreground) to the 1st Input (Background) at a given position and size         
50   Unknown        6:3  RENDER3        Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at a given position and size        
51   Unknown        6:3  RENDER3EX      Draw 2nd triplet of inputs (Foreground) to the 1st triplet (Background) at given 4 CORNERS position         
52   Unknown        2:1  RENDEREX       Draw 2nd channel (Foreground) to the 1st Input (Background) at given 4 CORNERS position          
53   Unknown        3:3  RGBSCREEN      RGB screen effect NOT Ready|    
54   Unknown        0:1  SCRATCHES      Scratches. to Simulate old film      
55   Unknown        3:3  SEPIA          Sepia - Vintage       
56   Unknown        1:3  SEPIAGRAY      Sepia - Vintage Starting from GrayScale Image         
57   Unknown        1:1  SHIFT          'Shift' left/right - Very useful to HUE shift  
58   Unknown        1:1  SHOCK          Shock filter ...  Still Developing
59   Unknown        1:1  SKELETON       'Skeletonize'       
60   Unknown        1:1  SOLARIZE       Classic Solarize effect (1 channel)       
61   Unknown        3:3  SOLARIZE3      Classic Solarize effect (3 channels)       
62   Unknown        3:3  SORTING        Pixel Sorting     
63   Unknown        1:2  SPLIT          Vertical/Horizontal Half Split (Useful for Stereo Images)  
64   Unknown        3:6  SPLIT3         Vertical/Horizontal Half Split (Useful for Stereo Images)   
65   Unknown        6:3  STEREO         Stereo Anaglyph      
66   Unknown        1:1  STIPPLE        Stipple effect  still Developing!    
67   Unknown        3:3  TEMPER.        Temperature and tint
68   Unknown        1:1  THINNING       Zhang Suen Thinning (Usually it't better to apply Otsu thresholding before) [Similar to Skeleton-Module]       
69   Unknown        3:3  TILEFY         Create a texture repetition  DO NOT USE !!! (WRONG)  
70   Unknown        3:3  TILTSHIFT      Fake Miniature - ToyEffect - Good with 'Panoramas' Pictures       
71   Unknown        1:1  TRACE          Trace WIP - Still developing!     
72   Unknown        1:1  USM            Unsharp Mask         
73   Unknown        3:3  VIBRANCE       Vibrance
74   Unknown        0:1  WATERMAP       Water Height Map , to use as input for HMD (HeightMap Deformer)

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1264 (28-Sep-2018)*
[Modules] 
- NEW: Lens: Camera lens distorsion
- NEW: Magnifiers: Magnifier Glass (Hotspot)
- xChord: Improved algorithm.
- Bilateral: Polynomial: Experimental superfast algorithm.
- Normalize; Normalize3: Added New Variance proportionality option.
- DoG: Added "Ratio" parameter.
- xChord: Improved algorithm.
[Other]
- Filter Project checkbox caption and tooltip update after closing the module-selection-window.

----------


## reexre

Coming soon *Stippling* effect based on Poisson Disc Distribution


~10K points


~13K points

----------


## reexre



----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Whats new on Update 0.3.1600 (20-Dec-2018)*

[Modules] 
- NEW: FastEPS: Fast edge preserve smoothing filter.
- NEW: FastEPS3: 3 channles Fast edge preserve smoothing filter.
- NEW: Stippling: Poission Disc Distribution Stippling effect.
- NEW: Fractalize: Experimental Picture to fractal effect
- NEW: Stipple2: New video Stipple algorithm. 
- NEW: Mix2W: Mix 2 channels by 2 weights (same way as Mix3w)
- NEW: Clamp: Clamp Values between a custom Range.
- NEW: ABS: Absoulte Value.
- NEW: FLOW2: New Edge tangent Flow algorithm.
- NEW: Q-Bertify: Q-Bert blocks 
- NEW: DCT and IDCT: Pure Discrete cosine transform (and inverse).
- NEW: Corner: SUSAN Corners Detection.
- NEW: RGB>LCH;LCH>RGB: Added Cie Lch colorspace conversion.
- RGB>HSL;HSL>RGB: Added HCL colorspace conversion.(experimental)
- ToneMap; ToneMap3: Added NoHalo(FastEPS) Option.
- Bilateral: New FAST algorithm option.
- BilaOAEX: 'Per level-Bilateral' option with fast algorithm.
- DogByF: (Flow Based Difference of Gaussian) Faster algorithm.
- Stipple: Faster algorithm.
- xChord: Improvements.
- Mosaic: New Algorithm (still incomplete)
- Sauvola: Bug Fix.
[Other]
- Added toggle Projects-Sorting-Mode by Clicking 'Load Project'-Label.
- Faster Tanh and Exp function. (approximated)
- Removed Displayed TXT file extension from Project List Names.
- Removed toggle Fullscreen.

Examples:

Original:


ToneMapping No Halo


Fast Edge preserve Smoothing  "FastEPS3" (prj: FAST Edge Preserve 04 RGB)


Q-Bertify:



Very happy of my new Edge preserving smoothing filters:
FastEPS and FastEPS3 modules.
This algorithm is entirely designed and developed by me. (Inspired by Gaussian IIR Blur)
The interesting aspect is that it is very fast and depends only on the size of the input, not on the "Smooth" parameter.
This is a 1D test of the algorithm.



You can follow/partecipate discussion on PMFX github here

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.1777 (18-Mar-2019)*
[Modules]
- NEW: Gain;Gain3: Inigo Quilez gain function
- NEW: LocalGain;LocalGain3: Local Inigo Quilez gain function
- NEW: BlurCirc;BlurCirc3:   Circle Blur
- NEW: Clamp3: Clamp values between a range (3 channels)
- NEW: vSplit: Video split before-after (WIP)
- FLOW: Revisited.
- BLUR;BLUR3: Implementation of 'moving-average' Algorithm (Thanks TheTrick & Mikle)
- FastEPS;FastEPS3: New Parameter: Range Difference Mode (Linear;Squared)
- FastEPS;FastEPS3: Small speed gain. 
- Normalize3: Option new mean as source (New mean = -1) now is per channel instead of global.
- Mix2x3: Added clamp outputs 0-1 Option.
- Mean: Added Alpha Trimmed Mean.
[Other]
- Save about 50MBytes ZIP file by downloading project-thumbs preview on Project-mouse-over.
- Speed gain thanks to Jacob Roman's "Faux"DoEvents. (by using GetQueueStatus)
- Use of Pade Approximant for Cos and Sin functions.
- On first run ask for desktop-shortcut creation.
- Changes on Widget FileList
- vbRC5BaseDlls folder merged to BIN folder.


created with "xPAINT test4" project

EDIT:
Added this Update:
*Update 0.3.1780 (19-Mar-2019)*
[Other]
- Fixed possible crash on program exit while downloading Project-Thumbs

----------


## reexre

I have implemented a technique that can perform a fairly fast blur of any shape.
the speed is about the same as the current BlurCirc(3)-node.

In next update 
BlurCirc;BlurCirc3 will be renamed to ShapeBlur(3) and extended with quite fast implementation of other shapes like Triangle Square Pentagon Hexagon Line Star Moon Heart Eye

ORIGINAL


CIRCLE


SQUARE


PENTAGON

----------


## reexre

Line


star


moon


heart


eye

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*
Update 0.3.1805 (30-Mar-2019)*
[Modules]
- New: Abs3: Absolute values (3 channels).
- BlurCirc;BlurCirc3 renamed to ShapeBlur(3) and extended with quite fast implementation of
  other shapes like Triangle Square Pentagon Hexagon Line Star Moon Heart Eye.
- Suppress-Node renamed to SoftThrsh.
[Other]
- Downloading Project-Thumbs from https://raw.githubusercontent.com/mi...FX/HTML/Thumbs
  +Optimization

----------


## reexre

*Median filter* is a filter I've never been crazy about.
I implemented it a few years ago, so I took the opportunity to review my algorithm.
I've improved it now, and it's much faster for squared kernels.
This means that, if the old algorithm to execute the effect takes a time T, the new algorithm will take about a time equal to sqr (T) * 2
I will probably do the same for Circle shaped kernel.

it will be available in next update

----------


## Tattia

> *Update 0.3.1805 (30-Mar-2019)*


Does this update work for everyone?

----------


## reexre

> Does this update work for everyone?


Thank you for your interest.

Do you mean backwards compatibility or a specific windows version ?

About backwards compatibility there should not be any problem.
You can download the ZIP file and extract it in a different Folder. Since it is Portable you can made a test by yourself.

About windows version it should work from Win XP onwards.

at disposal for every other question

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*
Update 0.3.2000 (28-May-2019)*
[Modules]
- New: MarchingS: Marching Squares abstraction.
- New: Median3: Median Filter on 3 channels
- New: Sphere: From flat to sphere effect (thanks to Olaf Schmidt)
- Median: Faster Algorithm.
- xChord: Extended text output filename
- LocalHEii: revisited
[Other]
- Restyle of a parameter setting widget.

----------


## reexre

I made a second version of the xPainter module.
Here you can see the first result.
(Maybe I will make some changes)
The xPainter2 module will be available in the next update

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2255 (20-Ago-2019)*
[Modules]
- New: Stippling2: Voronoi based stippling. Good but slow.
- New: xPainter2: Painter Effect V2.
- New: JigSaw Puzzle (thanks to Olaf Schmidt)
- New: Saturation: Saturation separately in R G B channels.
- New: Skin: Skin tone adjust (WIP)
- New: Straighten: Auto Straighten 
- New: Droste: Experimental Droste  Effect (WIP).
- New: SoftThrsh3: Soft Thresholding (3 Channels)
- Q-Bertify: Added "just hexagon" option (Hexagonal pixelate)
- Voronoi: Modified algorithm (similar to Stippling2)
[Other]
- Vertical Scrollbars sizes DPI aware.
- vbRichClient: Newest Version 5.0.69

----------


## reexre

I improved *Stippling2* Algorithm

Available in next update

TEST:

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2500 (18-Sep-2019)*
[Modules]
. Stippling2: Speed and aesthetic improvements.
- NEW: WhiteBal.: WhiteBalance using GrayWorld assumption.
[Other]
- Improved "Auto Arrange" algorithm.
- Added some CueBannerText(s)
- Fix watermark error on demo version.

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*
Update 0.3.2553 (20-oct-2019)*
[Modules]
- New: xPencil2: Artistic pencil draw.
- TiltShift: Added Circular and elliptical Shapes.
- xBiro: Renamed to xScribble
[Other]
_- Added Category Filter to FX-selector.
- ReStyle of Activation Form._
- Small performance improvements for BilaOA and GUI

----------


## reexre

About the list of modules (which can be connected in cascade) present in this program,
I started creating this github *wiki page* with the scope to be a little more comprehensive than the old one.

----------


## reexre

next update will have "Vivid Light" blend mode. (... among MANY other things)

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2671 (22-Nov-2019)*
[Modules]
- New: Drawtext: Basic text on image.
- New: Nrmlzd.vec: Vector Normalization.
- New: Kuwahara3: 3 Channels Kuwahara.
- New: BilaOA3: Orientation Aligned Bilateral Filter on 3 channels.
- Kuwahara: Added various Sectors-Modes.
- KuwANISO: New algorithm. (WIP)
- DoGbyF and BilaOA: faster.
- Mix2; Mix2x3 added Vivid Light.
- Quantize: Added various Uniform Soft Staircase.
- PNGout: renamed to PNGoutA.
- New: PNGOut: Save as PNG without the Alpha input Channel.
[Other]
- Internal Changes: SaveProject function.
- Modules and other minimal UI changes.
- Lock UI while filtering projects List.
- Slight change on Lab2RGB color space conversion.
- Implemented Stretch Project-flow to Window Size (Not applied).

Construction and restylized UI example

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2705 (05-Dic-2019)*
[Modules]
- New: Falloff: Nice Curve (can be S-Shaped).
- New: Falloff3: Nice Curve (can be S-Shaped) (3 channels).
- BLUR; BLUR3: Added 'Scaled Radius' option.
- MIX3; Added 'global mean' and 'Glb Gray BT601'
- KuwANISO: Improved.
[Other]
- Faster Startup: Avoid writing (icons) contents to Disk.
- UI: blinking disconnected inputs.

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2726 (03-Feb-2020)*
[Modules]
- FastEPS; FastEPS3: Added Gaussian Range Weight
[Other]
- Small fixes (CenterOn)


This update in not so relevant, but next will include a new module: TinyPlanet
Here are examples of current outputs

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*
*
Update 0.3.2795 (21-Feb-2020)*
[Modules]
- New: FLOWPaint:  Compute ETF and paint along it (Similar to BilaOA)
- New: FLOWPaint3: Compute ETF for each of the 3 channels and paint along it (Similar to BilaOA3)
- New: TinyPlanet: Simple TinyPlanet effect.
- New: Script11: Experimental VB6-Script processing for 1 inp 1 out channel.
- New: Script33: Experimental VB6-Script processing for 3 inps 3 outs channels.
- stdDEV: Added "Scaled Radius" and "Circle Shaped" options.
- DoG: Bug fix (R-Ratio) update 0.3.1264 (28-Sep-2018)
[Other]
- vbRichClient: Newest Version 5.0.74.
- Cleanup unused Module Output Memory.
- Increased max Photo Size.
- Backend UI optimizations.

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2850 (12-Apr-2020)*
[Modules]
- New: xBrio: Experimental Biro effect.
- FLOWPaint; FLOWPaint3: Added 'Spiky' option.
- PNGout: Now works with "Save Before and After" option.
[Other]
- Added "online-Help" button on Form FX selector.
- Small changes to Kmeans modules.

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.2980 (27-May-2020)*
[Modules]
- NEW: VRLC : Variable Radius Local Contrast (Replaced LCv2 Module).
- NEW: VRLC3: Variable Radius Local Contrast (3 Channels).
- NEW: Cartoonize: Miorsoft CartoonizeMe V2 Effect. (Replaced CartV2 Module).
- NEW: Rotate: Basic Rotate and Zoom.
- NEW: SMH:  Shadows Midtones and Highlights Tweak.
- NEW: SMH3: Shadows Midtones and Highlights Tweak (3 Channels)
- NrmlzdVec: Added "Low Values Desaturation" Option
- Borders: Renamed to Vignette.
[Other]
- Added "Lock Image Zoom" to Lock Image size when Zooming UI with CNTRL-MouseWheel.
- vbRichClient: Newest Version 5.0.76
- Minor Improvements on Custom-MsgBox and Auto-Arrange.


Examples created with project *"FlowART Pencil 3 2.txt"*





Example created with project *"VRLC FakeHDR 00.txt"*

----------


## vg0nline

Started using PhotoModularFX a few days ago and I was immediately hooked!  Great job @reexre!
Brainstorming on how to maximize your software and have a collaboration.  I will speak to you soon.  More power to you. Stay safe!

----------


## vg0nline

Thank you for this awesome software!

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.3000 (12-Jul-2020)*
[Modules]
- New: MIX4: Mix 4 channels by wheighted sum and other ways.
[Other]
- Copy output image to the Clipboard using CNTRL-W.
- Basis setup for "no user manual operations" for update.
- vbRichClient: Newest Version 5.0.78

Example project "Retinex TOON Color."

----------


## Olisha1997

Thank You!

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*Update 0.3.3042 (10-Sep-2020)*
[Modules]
- FlowPain and FlowPaint3: Added "Kernel Mode" options.
- VRLC and VRLC3: Slight performance improvement.
- FallOff and FallOff3: Added "0-1 Input clamp" option.
[Other]
- (barely noticeable) background image of the app removed.
- Minor change on Modules-progess graphic. 
- Modules error handlers: (temporarily) removed.


_Added some nice Effects, check newest projects:_
Oleg Toon FEPS "n"TOON Classic Oleg ".."

----------


## reexre

Exmaple effects:

(Watch at 720p)

----------


## reexre

Demo of a new effect available in next update

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Update 0.3.3180 (11-Nov-2020)*
[Modules]
- NEW: FakeHDR2: Completely New algorithm.
- NEW: Resize2X_3; ResizeHALF3: Resize 2X and HALF for 3 channels.
- Size2X; SizeHalf: Added new algorithm and options.
- FlowPaint; FlowPaint3: Small performance improvement.  
- LocalNorm: Slight improvement.
- xBiro: Completely New algorithm.
[Other]
- Small Fix: Correctrly show Show App Path on Update messages.
- Small Fix: Custom MsgBox Height.
- Nicer Modules tooltip.
- Small graphic embellishment of the module currently being processed.
- Changed Watermark text. 
- vbRichClient: Newest Version 6.0.0.1 (RC6)
  NOTE: This automatic update may fail. Do it manually: Extract the ZIP

----------


## Schmidt

> *UPDATED*
> - vbRichClient: Newest Version 6.0.0.1 (RC6)


Ah, good to know that the change to RC6 was (apparently) not causing any issues in your (in the meantime) quite large Project.

As written in the "Version-log", in the new version I've completely changed the underlying "cairo-flat-library" compiling their newest sources.

This brought indeed a speed-up, especially in "Polygon-Filling" and "PixelSurface-based blending-ops" -
(I've measured about 30-40% speed-improvements there).

But what was also changed (underneath the COM-wrapper-methods) was especially the Font-Rendering -
(which I've now completely left to cairo again, whereas in the RC5-wrapper I had to resort to using the Windows-GDI, to finally render the Glyphs in good quality).

So, if there's a chance for "different, potentially surprising behaviour" in the new RC6 - it would be the Font-Rendering you should "keep an eye on".
(I've tested this of course in a few Widget-based Apps of mine, but yours is currently one of the largest of this kind out there, I guess).

At this occasion, your recent algo- and effect-additions (BarbieDoll, Painter, StipplingV2 & Co.) are fantastic.

Olaf

----------


## reexre

> Ah, good to know that the change to RC6 was (apparently) not causing any issues in your (in the meantime) quite large Project.
> 
> As written in the "Version-log", in the new version I've completely changed the underlying "cairo-flat-library" compiling their newest sources.
> 
> This brought indeed a speed-up, especially in "Polygon-Filling" and "PixelSurface-based blending-ops" -
> (I've measured about 30-40% speed-improvements there).
> 
> But what was also changed (underneath the COM-wrapper-methods) was especially the Font-Rendering -
> (which I've now completely left to cairo again, whereas in the RC5-wrapper I had to resort to using the Windows-GDI, to finally render the Glyphs in good quality).
> ...


Hi, 
Yes, I had no problems upgrading to the RC6 version.

Speaking of font rendering, everything seems fine to me.

I take this opportunity to point out an anomaly that I had noticed in RC5 (and which at the moment I don't know has changed in RC6) regarding the rendering of tooltips.
I don't know how to explain it, but sometimes, (When VbCrLf characters are present) some lines at the bottom were missing.
And to remedy this, I added some space characters to the end of the text lines.

Getting compliments from you always flatters me. Thanks!

By the way I find this program very original and functional.
The possibility of "connecting" the various modules with a few clicks to your liking (plus the setting of the parameters of it) to achieve a customized effect I think is really a great thing.
But I didn't find much enthusiasm (in terms of numbers) from users.
I don't know if because I didn't do any promotion, or for some other reason, such as:
- Complicated interface (I tried to simplify it and reduce it to the bone)
- Difficulty in learning the operations that the various modules (now more than 260) carry out. (which in fact requires a non-trivial learning curve especially for newbies)
- Or some other reason.

However I am proud of this program, which over time (Absolutely not full time, but rather sporadically; in fits and starts) I have implemented and improved in quality and functions.

 :Thumb:  I'll keep an eye on Font-Rendering.

----------


## reexre

@Olaf

BTW
I updated this project (with RC6) which _do an intensive use of Polygons_ ( PolygonSingle )

to run it fast as it can, turn on the TURBO checkbox

( It seems faster, but not sure though )

----------


## Schmidt

> I updated this project (with RC6) which _do an intensive use of Polygons_ ( PolygonSingle )
> 
> to run it fast as it can, turn on the TURBO checkbox
> 
> ( It seems faster, but not sure though )


What's faster IMO "without doing anything" is the Blending-ops (CC.RenderSurfaceContent).

And what can be made faster now (manually) is the typical "Fill and then Stroke" sequence (on a Polygon-Path):



```
  m.CC.SetSourceColor Obj.Color, 1, Refl
  m.CC.AntiAlias = CAIRO_ANTIALIAS_NONE: m.CC.Fill True
      
  m.CC.SetSourceColor vbBlack
  m.CC.AntiAlias = CAIRO_ANTIALIAS_FAST: m.CC.Stroke
```

The above snippet is out of my new c3Dxxx supporting Classes, which I will integrate into the next RC6-release.

Normally, the CC.Antialias-Prop is sitting at CAIRO_ANTIALIAS_DEFAULT ...
(which in the RC6 version ensures a slightly better looking AntiAliasing, without loosing speed).

What's new is the enum-value CAIRO_ANTIALIAS_FAST (which looks nearly as good as the old RC5-CAIRO_ANTIALIAS_DEFAULT).

Further speedup comes from the little trick on the Fill-instructions (no Antialiasing, but that was available in RC5 as well).

In my 3D rendering tests (3000 Polygons or so), I see about**:
- 15 FPS (when not touching CC.Antialias at all, leaving it at the Default)
- 25 FPS (with a "global" setting of CAIRO_ANTIALIAS_FAST - for both - Filling and Stroking)
- 36 FPS (with the little trick, which does the filling with no antialiasing, and the stroking with CAIRO_ANTIALIAS_FAST)

Just to give you some rough idea of the speed-ratios over the different modes.

HTH

Olaf

----------


## reexre

@Olaf Thank you! Good to know!

I tested on CAIRO_ANTIALIAS_FAST on PhotoModularFX (Drawing Interface [Nodes and connections]) and it's faster and keeping good quality. 
Next update will have this improvement





> The above snippet is out of my new c3Dxxx supporting Classes, which I will integrate into the next RC6-release.


Wow something 3D is coming! ...

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Update 0.3.3265 (09-feb-2021)*
[Modules]
- FlowPaint; FlowPaint3: Default and 'Spiky' Algorithms performance improvement.
- HUE-Harm: Minimal Revision.
- SmoothMM: From Quadratic to Cubic polynomial Smooth.
- NOISE; NOISER: High performance improvements.
- DCT; IDCT: Some performance improvements.
- MIX4: Bug fix on SUM.
- Yxy2RGB: Bug Fix.
[Other]
- Select and Move a Group of Modules at once. (by holding shift)
- Basis for Managing Modules-Groups.
- Bugs Fix.

----------


## reexre

@Olaf
Hi Olaf, I hope you see this post and can help me solve the problem.
ABOUT FONTS
So, I'm using RC6.0.0.4, and I've noticed a problem with Fonts appearing "blurry" .
This is regardless of Antialias settings or anything else (as far as I can tell).
Description:
I have custom widgets that are destroyed/created at the moment on top of another "Container" widget


```
CNTRL() as Object
Set CNTRL(I) = W.Widgets.Add(New cwCustomWidget .....
```

When Zoom is 100% no problem. Otherwise, sometimes the fonts appear blurry.
The strange thing is this:
The container widget is movable. If I move it with the mouse and release it, it happens that in some positions of the screen the Fonts are OK, while in other positions they appear blurred. (same Zoom)
This is a bizarre behavior that I can't explain.
To verify
-download the program,
https://miorsoft.github.io/Site/Phot...rFX/index.html
-select a project that has a node with parameters, 
-select that node, 
-CNTRL-rotate to zoom in and move the parameter container to different positions on the screen.

you will notice that if at a certain zoom value the fonts of the widgets inside the container widget appear blurred, by moving the container widget on some places of the screen the fonts will no longer appear blurred.

----------


## Schmidt

> it happens that in some positions of the screen the Fonts are OK, 
> while in other positions they appear blurred. (same Zoom)


I know what caused this (since I've made some changes recently with regards to more precise Widget-Positioning with higher ZoomFactors) - but apparently failed to notice the negative side-effect this had with Font-Outputs (on my High-DPI-Display, Text is always sharp, no matter what)...

Will try to find a compromise in upcoming version 6.0.7 - 
so that Font-Output remains sharp, regardless of the current Zoomfactor.

Olaf

----------


## reexre

yes, on a high resolution screen it is not very noticeable and annoying.
Anyway here is an example image: 
Same Zoom and different positions.
*2X* magnified image

https://photos.app.goo.gl/6CmFQ2jZML2oJ1KA9

----------


## Schmidt

Thanks for the Screenshot - and BTW - RC 6.0.7 was just uploaded to my Server...

Would be nice, if you could confirm whether everything works again "as before"...

Olaf

----------


## reexre

Thanks, yes, now with 6.0.0.7
As far as Fonts are concerned everything is ok.
I have a (widget) custom simple button.
Now, when the coordinates of the widget (widget.move) are not integer I'm experiencing problems in the button outline. For example it disappears in one of the 4 contour sides. (Top)


```
            .RoundedRect 0, 0, dx, dy, mBorderRadius
            .Fill
            .SetLineWidth 1
            .SetSourceColor ...   
            .RoundedRect 0.5, 0.5, dx - 1, dy - 1, mBorderRadius           
            .Stroke
```

Anyway by placing integer values on Widget.Move everything is fine.
it's a very small problem, which I didn't even intend to report.

PS : Seems to happen only at 100% Zoom


_EDIT:_
Maybe the problem is a bit more serious, because I notice that sometimes, changing Zoom, some buttons lose part of the bottom outline.
This happens even when widget.move has integer values.

[Widget.move is called only once at startup, then Zoom is changed and no more Widget.move calls.]

_EDIT 2:_
At the moment resolved this way:


```
.RoundedRect 0.5, 0.5, dx - 2, dy - 2, mBorderRadius
.Stroke
```

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Update 0.3.3403 (11-apr-2021)*
[Modules]
- NEW: Dices: Fill with dices according to grayscale.
- NEW: SandArt: Experimental SandArt effect. Very Slow! (WIP).
- CannyEdge: New 'Thinning' option. 
- Quantize: Bugs fixes.
- OTSU: added 6 levels option.
- MAP3: added 'Global MinMax' option.
[Other]
- Basis for the effects implementation via DX-Shader.
- vbRichClient: Newest Version 6.0.0.7 (RC6)

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*

*
Update 0.3.3420 (14-jul-2021)*
[Modules]
- MAP3: Bug fix on 'Global MinMax' option.
- Dices: Save Text file with the name of input picture.
[Other]
- Updater: removed vbRichClient dependency.
- vbRichClient: Newest Version 6.0.0.8 (RC6)

----------


## reexre

*NEW UPDATE
*
*Web*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Update 0.3.3610 (10-jan-2022)*
[Modules]
- NEW: FLATspace: Simplify RGB pixels cloud to a plane. (experimental)
- NEW: Pointillism: Simple Pointillism effect.
- NEW: DXtestNode: Perform effect via DX-Shader.
- Mosaic: Added New Algorithm.
- QuantGNG: Rewritten Algorithm.
- QUANTIZE: Added New mode: GNG (Growing neural Gas)
- Dices: Added GNG mode.
- Canny;Edges;HmapD;PlasticWrap;Mosaic;SandArt: minor changes.
- ShapeBlur;ShapeBlur3: Re-center Shapes (E.G.:Moon)
- ThrBlur;ThrBlur3: New Poisson-Disk Algorithm.
[Other]
- Settings Menu Basis.
- New theme: Neumorphism.
- New Option: Enable/Disable Node AutoConnect.
- Main Panel: Now moveable with click and drag.
- Manage missing d3dx9_43.dll error.
- vbRichClient: Newest Version 6.0.0.9 (RC6)


List of Modules

----------


## apfelgluck

I love the concept, bravo, the principle works well ...

CORN

I no longer understand anything about microsoft ... no digital key, no window saying that the author could not be identified ... bang ... smartscreen is totally absurd.

How did you get recognition from the smartscreen system?

no digital key no identifier and the software is not bothered by "unknown authors" what to do with smatscreen?

All lme asks for hundreds of euros.

----------


## reexre

> I love the concept, bravo, the principle works well ...
> 
> CORN
> 
> I no longer understand anything about microsoft ... no digital key, no window saying that the author could not be identified ... bang ... smartscreen is totally absurd.
> 
> How did you get recognition from the smartscreen system?
> 
> no digital key no identifier and the software is not bothered by "unknown authors" what to do with smatscreen?
> ...


hi
thanks for your interest and compliments.

"How did you get recognition from the smartscreen system?"

The crazy thing is that I don't know. I didn't do anything in particular.
I don't know much about smartscreen.

Maybe because it's portable (no installation needed)
I think someone else more experienced can explain this.

----------


## apfelgluck

> hi
> thanks for your interest and compliments.
> 
> "How did you get recognition from the smartscreen system?"
> 
> The crazy thing is that I don't know. I didn't do anything in particular.
> I don't know much about smartscreen.
> 
> Maybe because it's portable (no installation needed)
> I think someone else more experienced can explain this.



I don't understand anything, I removed the self-signed keyf which ONLY works on my pc. I don't know, I don't understand anything other than buying a digicert key in order to have an identity ... The software itself scrupulously respects windows .. during installation no dll is replaced if it exists whatever its version, the installation is limited to a directory in the programfile of a few MB, the environment being very compact, the software creates a janus directory in roaming (each account has its own data) such than microsoft wants, and janus desktop does not come out of these two directories. The environment runs smoothly...nothing justifies a blue screen. all that smartscreen detects is "unknown software" "unknown author" (buy me a key).

The project is on hold, awaiting a solution.

------------------------------

To return to the subject, the interface of your project is really pleasant to use, I would miss a small menu bar at the top with some functions ... templates and etc. Really a great project.

----------


## Schmidt

> The project is on hold, awaiting a solution.


You should probably ask about this problem in the main-VB6-forum -
(this one here is much less frequented).

Olaf

----------


## apfelgluck

> You should probably ask about this problem in the main-VB6-forum -
> (this one here is much less frequented).
> 
> Olaf


I feel like I found the scrap on my own (as usual on my own) I activated the "developer mode" in the security panel, which allows the application to be installed from any source and, *no smartscreen?* I test the installation on a pc under windows 11, (I will erase everything, cleaning) and start again. download and ??? (suspense)

*bang* smartscreen ... ******sdsdsd****sd*sd**sd*s*d*s*d**sdsdds (merde)

----

Microsoft provides a kit: app certification kit ... which seems to have solved this problem that made me completely gaga. Apparently no more worries on three pc test ... PUTAIN CA MARCHE !!!!

----------


## reexre

*UPDATED*

*DOWNLOADS*

*- SoftPedia ZIP*   (may take some days to be updated)
*- ZIP*


*Update 0.3.3844 (22-Jun-2022)*
[Modules]
- NEW: ShiftMean; ShiftMean3: Edge preserve smothing. Similar to ThrBlur but a lot faster.
- FlowPaint; FlowPaint3: Better quality and algorithm performance.
- SoftThr;SoftThr3: Added 'Integral SmoothStep' Algo.
- RGB>HSL; HSL>RGB: Added HSI colorspace.
- MUL; MUL3: Added 'mean base'.
- NEW: Mean-Var: Compute mean and Variance using Disk kernel.
[Other]
- Added Projects toggle sort mode: By Creation Time.
- Bug Fix: Create link click & Drag.

----------

