From fb8454cc993871715fbb556e6cf63f07e698b4a7 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 9 Jun 2022 21:07:51 +0800 Subject: ... --- src/platform/graphics/cairo/CairoImageFactory.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/platform/graphics/cairo/CairoImageFactory.cpp') diff --git a/src/platform/graphics/cairo/CairoImageFactory.cpp b/src/platform/graphics/cairo/CairoImageFactory.cpp index 9691add2..c2ebe8b0 100644 --- a/src/platform/graphics/cairo/CairoImageFactory.cpp +++ b/src/platform/graphics/cairo/CairoImageFactory.cpp @@ -87,15 +87,20 @@ std::unique_ptr DecodePng(CairoGraphicsFactory* factory, return cairo_image; } -inline std::uint32_t Mul(std::uint32_t v, float a) { return v * a; } +std::uint32_t Div(std::uint32_t v, float a) { + if (a == 0.f) return 255; + std::uint32_t result = static_cast(v / a); + if (result > 255) result = 255; + return result; +} std::uint32_t ConvertPargbToRgba(std::uint32_t source) { std::uint32_t result = 0; result |= (source & 0xFF000000) >> 24; float a = 1.f - result / 255.f; - result |= Mul((source & 0x00FF0000) >> 16, a) << 24; - result |= Mul((source & 0x0000FF00) >> 8, a) << 16; - result |= Mul(source & 0x000000FF, a) << 8; + result |= Div((source & 0x00FF0000) >> 16, a) << 24; + result |= Div((source & 0x0000FF00) >> 8, a) << 16; + result |= Div(source & 0x000000FF, a) << 8; return result; } -- cgit v1.2.3