diff --git a/project/src/graphics/utils/ImageDataUtil.cpp b/project/src/graphics/utils/ImageDataUtil.cpp index 70680b802..2e01c0108 100644 --- a/project/src/graphics/utils/ImageDataUtil.cpp +++ b/project/src/graphics/utils/ImageDataUtil.cpp @@ -131,7 +131,7 @@ namespace lime { int destBytesPerPixel = image->buffer->bitsPerPixel / 8; bool useAlphaImage = (alphaImage && alphaImage->buffer->transparent); - bool blend = (mergeAlpha || (useAlphaImage && !image->buffer->transparent)); + bool blend = (mergeAlpha || (useAlphaImage && !image->buffer->transparent) || (!mergeAlpha && !image->buffer->transparent && sourceImage->buffer->transparent)); if (!useAlphaImage) { diff --git a/src/lime/_internal/graphics/ImageDataUtil.hx b/src/lime/_internal/graphics/ImageDataUtil.hx index 2346d19c9..956d9b7db 100644 --- a/src/lime/_internal/graphics/ImageDataUtil.hx +++ b/src/lime/_internal/graphics/ImageDataUtil.hx @@ -337,7 +337,7 @@ class ImageDataUtil var destBytesPerPixel = Std.int(image.buffer.bitsPerPixel / 8); var useAlphaImage = (alphaImage != null && alphaImage.transparent); - var blend = (mergeAlpha || (useAlphaImage && !image.transparent)); + var blend = (mergeAlpha || (useAlphaImage && !image.transparent)) || (!mergeAlpha && !image.transparent && sourceImage.transparent); if (!useAlphaImage) { diff --git a/src/lime/graphics/Image.hx b/src/lime/graphics/Image.hx index 00074bd75..4df3f7a15 100644 --- a/src/lime/graphics/Image.hx +++ b/src/lime/graphics/Image.hx @@ -448,6 +448,12 @@ class Image sourceImage = clone(); } + if (alphaImage == sourceImage && (alphaPoint == null || (alphaPoint.x == 0 && alphaPoint.y == 0))) + { + alphaImage = null; + alphaPoint = null; + } + switch (type) { case CANVAS: