Fix divide by zero (thanks @larsiusprime, @hasufel)

This commit is contained in:
Joshua Granick
2015-07-21 09:15:09 -07:00
parent c0ef737af0
commit e54502354c

View File

@@ -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);