Page 1 of 5 1234 ... LastLast
Results 1 to 40 of 190

Thread: Program Testers

  1. #1

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    PhotoModularFX (Program Testers)

    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
    Last edited by reexre; Nov 15th, 2020 at 12:41 PM.

  2. #2
    PowerPoster
    Join Date
    Jun 2013
    Posts
    7,207

    Re: Program Testers

    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

  3. #3

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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

  4. #4
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    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.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  5. #5
    PowerPoster
    Join Date
    Feb 2012
    Location
    West Virginia
    Posts
    14,205

    Re: Program Testers

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

  6. #6

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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!

  7. #7
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    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.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  8. #8

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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 :
    Code:
    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...
    Code:
    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.

  9. #9
    Super Moderator dday9's Avatar
    Join Date
    Mar 2011
    Location
    South Louisiana
    Posts
    11,698

    Re: Program Testers

    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.
    Last edited by dday9; Mar 30th, 2015 at 01:58 PM.
    "Code is like humor. When you have to explain it, it is bad." - Cory House
    VbLessons | Code Tags | Sword of Fury - Jameram

  10. #10

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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?

  11. #11

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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

  12. #12
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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.

    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.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  13. #13
    PowerPoster
    Join Date
    Jun 2013
    Posts
    7,207

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    In the last update I recompile the richtip.dll with RegFree applied to each of its classes. ( 4)
    Each of it has :
    Code:
    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
    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:
    Code:
    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:
    Code:
    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:
    Code:
    Private Function ClientAreaScreenCoords(pHwnd As Long) As RECT
    That's it already...

    Quote Originally Posted by reexre View Post
    Maybe something wrong about folder...
    Code:
    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).


    Quote Originally Posted by reexre View Post
    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

  14. #14

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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.

  15. #15

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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.

  16. #16
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,253

    Re: Program Testers

    Hi reexre - interesting project

    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...
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  17. #17
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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.

    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.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  18. #18

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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

  19. #19
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,253

    Re: Program Testers

    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.
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  20. #20

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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

    Code:
    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):

    Code:
    -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) )

    Code:
    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

  21. #21

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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

  22. #22

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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 ?

  23. #23
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,253

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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....
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  24. #24
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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).

    Quote Originally Posted by reexre View Post
    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."

    Hope this helps.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  25. #25

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    Thank you very much Tanner !

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


    Code:
    '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 ) ]

  26. #26
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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.
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  27. #27

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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...

  28. #28

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    Quote Originally Posted by Tanner_H View Post
    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)

  29. #29
    Fanatic Member
    Join Date
    Aug 2013
    Posts
    806

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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.

    Quote Originally Posted by reexre View Post
    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 ?
    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

    Quote Originally Posted by reexre View Post
    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.)
    Last edited by Tanner_H; Apr 3rd, 2015 at 08:15 AM. Reason: Use σ char because it looks pretty ;)
    Check out PhotoDemon, a pro-grade photo editor written completely in VB6. (Full source available at GitHub.)

  30. #30

  31. #31
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,253

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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...
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  32. #32

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    Quote Originally Posted by ColinE66 View Post
    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

  33. #33

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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)
    Code:
        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

    Code:
       
       vbDR.Srf.DrawToDC frmMain.PIC.hDC
       frmMain.PIC.Refresh

    Hope for a big help by Olaf

  34. #34
    Frenzied Member
    Join Date
    Apr 2012
    Posts
    1,253

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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....
    If you don't know where you're going, any road will take you there...

    My VB6 love-children: Vee-Hive and Vee-Launcher

  35. #35
    PowerPoster
    Join Date
    Jun 2013
    Posts
    7,207

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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"? ).

    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:

    Code:
    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
    Last edited by Schmidt; Apr 15th, 2015 at 07:30 PM.

  36. #36

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    AWESOME!

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

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

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

    Code:
    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.

  37. #37

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    Pure Interface

    Here's my result

    [DOWNLOAD] interface V0.2 Source Code


    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 ?

    Name:  S2.jpg
Views: 18512
Size:  18.5 KB

  38. #38

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    GOOD NEWS!

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

    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

  39. #39
    PowerPoster
    Join Date
    Jun 2013
    Posts
    7,207

    Re: Program Testers

    Quote Originally Posted by reexre View Post
    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).

    Quote Originally Posted by reexre View Post
    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).

    Quote Originally Posted by reexre View Post
    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

  40. #40

    Thread Starter
    Fanatic Member
    Join Date
    Sep 2010
    Location
    Italy
    Posts
    678

    Re: Program Testers

    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 ?:

    Code:
    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
    Quote Originally Posted by Schmidt
    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

    Quote Originally Posted by Schmidt
    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...

Page 1 of 5 1234 ... LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width