From a3b5ac6cc2dd6878a40ae7095aea232409c167be Mon Sep 17 00:00:00 2001 From: Nick Gammon Date: Wed, 17 Feb 2010 16:53:55 +1100 Subject: [PATCH] Fixed bug in WindowBlendImage mode 4 (dissolve) --- miniwindow.cpp | 32 +++++++++++++++++++++++++++++--- scripting/methods.cpp | 10 +++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/miniwindow.cpp b/miniwindow.cpp index bb533f78..f1f3dcac 100644 --- a/miniwindow.cpp +++ b/miniwindow.cpp @@ -2089,9 +2089,35 @@ long CMiniWindow::BlendImage(LPCTSTR ImageId, case 2: Blend_It (Blend_Average); break; case 3: Blend_It (Blend_Interpolate); break; - case 4: // dissolve - randomly choose pixels based on opacity - for (i = 0; i < count; i++) - pB [i] = (genrand () < Opacity) ? pA [i] : pB [i]; + case 4: // dissolve - randomly choose pixels based on opacity + { + + for (row = 0; row < iHeight; row++) + { + long base = row * perline; + unsigned char rA, gA, bA, rB, gB, bB; + for (i = 0; i < perline - 2; ) + { + double rnd = genrand (); + bA = pA [base + i]; + gA = pA [base + i + 1]; + rA = pA [base + i + 2]; + + bB = pB [base + i]; + gB = pB [base + i + 1]; + rB = pB [base + i + 2]; + + pB [base + i] = (rnd < Opacity) ? rA : rB;; + i++; + pB [base + i] = (rnd < Opacity) ? gA : gB; + i++; + pB [base + i] = (rnd < Opacity) ? bA : bB; + i++; + + } + } // end for each row + + } break; // darkening modes diff --git a/scripting/methods.cpp b/scripting/methods.cpp index 92df14de..188691ef 100644 --- a/scripting/methods.cpp +++ b/scripting/methods.cpp @@ -13775,9 +13775,13 @@ long r, g, b; case 3: Blend_It (Blend_Interpolate); break; case 4: // dissolve - randomly choose pixels based on opacity - r = (genrand () < Opacity) ? rA : rB; - g = (genrand () < Opacity) ? gA : gB; - b = (genrand () < Opacity) ? bA : bB; + { + double rnd = genrand (); + + r = (rnd < Opacity) ? rA : rB; + g = (rnd < Opacity) ? gA : gB; + b = (rnd < Opacity) ? bA : bB; + } break;