From e54502354c40e4d837e6da9be38c2e208c38c82c Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Tue, 21 Jul 2015 09:15:09 -0700 Subject: [PATCH] Fix divide by zero (thanks @larsiusprime, @hasufel) --- lime/graphics/utils/ImageDataUtil.hx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lime/graphics/utils/ImageDataUtil.hx b/lime/graphics/utils/ImageDataUtil.hx index ce4f36b32..ee5cc2cdf 100644 --- a/lime/graphics/utils/ImageDataUtil.hx +++ b/lime/graphics/utils/ImageDataUtil.hx @@ -263,10 +263,18 @@ class ImageDataUtil { oneMinusSourceAlpha = 1 - sourceAlpha; blendAlpha = sourceAlpha + (destAlpha * oneMinusSourceAlpha); - destPixel.r = RGBA.__clamp[Math.round ((sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; - destPixel.g = RGBA.__clamp[Math.round ((sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; - destPixel.b = RGBA.__clamp[Math.round ((sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; - destPixel.a = RGBA.__clamp[Math.round (blendAlpha * 255.0)]; + if (blendAlpha == 0) { + + destPixel = 0; + + } else { + + destPixel.r = RGBA.__clamp[Math.round ((sourcePixel.r * sourceAlpha + destPixel.r * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; + destPixel.g = RGBA.__clamp[Math.round ((sourcePixel.g * sourceAlpha + destPixel.g * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; + destPixel.b = RGBA.__clamp[Math.round ((sourcePixel.b * sourceAlpha + destPixel.b * destAlpha * oneMinusSourceAlpha) / blendAlpha)]; + destPixel.a = RGBA.__clamp[Math.round (blendAlpha * 255.0)]; + + } destPixel.writeUInt8 (destData, destPosition, destFormat, destPremultiplied);