From 72724a35c736d32024b69f1ddf103161416ad7ab Mon Sep 17 00:00:00 2001 From: GenevensiS <66968533+G-e-n-e-v-e-n-s-i-S@users.noreply.github.com> Date: Fri, 24 Apr 2026 15:27:21 +0200 Subject: [PATCH] allow `set_alpha` to handle values > 1.0 --- src/gfx/blend_image.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/gfx/blend_image.cpp b/src/gfx/blend_image.cpp index 85085d4d..3e276278 100644 --- a/src/gfx/blend_image.cpp +++ b/src/gfx/blend_image.cpp @@ -141,16 +141,31 @@ void set_alpha(Image& img, Byte* al, const wxSize& alpha_size) { } } -void set_alpha(Image& img, double alpha) { - Byte b_alpha = Byte(alpha * 255); - if (!img.HasAlpha()) { - img.InitAlpha(); - memset(img.GetAlpha(), b_alpha, img.GetWidth() * img.GetHeight()); - } else { - Byte *im = img.GetAlpha(); - size_t size = img.GetWidth() * img.GetHeight(); - for (size_t i = 0 ; i < size ; ++i) { - im[i] = (im[i] * b_alpha) / 255; +void set_alpha(Image& img, double alpha) { + size_t size = img.GetWidth() * img.GetHeight(); + if (alpha <= 0.0) { + if (!img.HasAlpha()) img.InitAlpha(); + memset(img.GetAlpha(), Byte(0), size); + } + else if (alpha > 1.0) { + if (!img.HasAlpha()) return; + else { + Byte *im = img.GetAlpha(); + for (size_t i = 0 ; i < size ; ++i) { + im[i] = Byte(min(im[i] * alpha, 255.0)); + } + } + } + else { + Byte b_alpha = Byte(alpha * 255); + if (!img.HasAlpha()) { + img.InitAlpha(); + memset(img.GetAlpha(), b_alpha, size); + } else { + Byte *im = img.GetAlpha(); + for (size_t i = 0 ; i < size ; ++i) { + im[i] = (im[i] * b_alpha) / 255; + } } } }