RustForge Sign Painter · published · build 23706508

Transmission from RustForge 🎙️
While the last update was all about the shiny new Image Editor, version 6.0.0.2 is entirely focused on what's under the hood. I've spent the week dialing in the raw mathematics of the drawing engine, fixing edge case bugs, and heavily optimizing the background memory. The Adaptive Palette generator has been revisited, to be completely "blind" to background noise, ensuring 100% of your color slots are dedicated to the actual subject of your art. Alongside that, the image preview logic has been changed considerably, completely eliminating UI distortions, or first time runs causing the preview image to not show/load due to no canvas area set.
Adaptive Palette Optimization: The palette algorithm now natively integrates your Ignore Background and Tolerance settings during its pre-scan. It completely strips out background pixels before generating colors, reserving every single palette slot for your full image.
Aspect-Correct Boundary Math: Restored and separated the aspect-ratio boundary math inside the painting engine.
Hardened Configuration: Rewrote the configuration parser to safely handle all variables with default fallbacks as safety measures, preventing silent crashes when loading custom hex colors, and other settings that could throw a null reference error.
The "Ghost Palette" Problem
The Challenge: Previously, the Adaptive Palette was scanning entire images, including noisy background pixels. It would average out those compression artifacts and waste palette slots on colors it should not have. When the painter hit a noisy pixel just outside your tolerance, it would snap to that "ghost" color and paint the color anyway.
The Fix: Built the color-distance math directly into the palette generator. By blinding the algorithm to the background, it never generates those color buckets in the first place, forcing it to use the optimal image colors.
The Silent Crash
The Challenge: Saving a background color with a full alpha channel was exceeding the maximum size of a standard 32-bit integer. This caused a silent overflow crash in the background, breaking most of the background skipping entirely.
The Fix: Upgraded the config parsing to utilize hex colors with a safe memory wrap, ensuring alpha channels are perfectly retained for the engine's transparency and skipping logic.
The Memory Leak Trap
The Challenge: If a user cancelled a painting mid stroke, or if the thread was forcefully aborted, the image being used by the pathfinding engine was occasionally left in memory, eventually leading to an Out-Of-Memory crash.
The Fix: Wrapped the background thread's image data in memory disposal blocks, guaranteeing that garbage collection clears the RAM when the painting task ends, no matter how it was stopped.
HD Canvas Scaling (Zooming): While the new Smart Brush Suggestion feature combats the Moiré effect, if you zoom in/out heavily while painting on canvases like the new Artist DLC Canvas' Large Banner on Pole or the XL Picture Frame, the engine's scaling will change and your paint strokes will misalign. Most large Canvas's require a higher brush size due to its inflated size on screen. Fix: Do not zoom in or out while mapping/painting. If you absolutely must zoom in or zoom out, manually increase/decrease your brush size slightly to bridge the newly created gaps.
Contour Tracing & Smart Pathing (Resume Limitations): With how Contour Tracing and Smart Pathing calculate the most efficient omnidirectional paths for curves and fills, it is mathematically impossible to resume a paused painting from the exact pixel you stopped at. Instead, the engine will resume from the currently painting color, and begin from the start of that specific color layer to ensure nothing is missed. This is an intended feature of these advanced methods. It may add a few minutes to your total paint time if paused and resumed, but this prevents missing structural chunks of your image.