diff --git a/src/gui/painting/qrgba64.h b/src/gui/painting/qrgba64.h index fab9506..575d649 100644 --- a/src/gui/painting/qrgba64.h +++ b/src/gui/painting/qrgba64.h @@ -122,9 +122,21 @@ public: Q_DECL_CONSTEXPR quint8 green8() const { return div_257(green()); } Q_DECL_CONSTEXPR quint8 blue8() const { return div_257(blue()); } Q_DECL_CONSTEXPR quint8 alpha8() const { return div_257(alpha()); } - Q_DECL_CONSTEXPR uint toArgb32() const + Q_DECL_RELAXED_CONSTEXPR uint toArgb32() const { - return (alpha8() << 24) | (red8() << 16) | (green8() << 8) | blue8(); + Q_CONSTEXPR quint64 mask = Q_UINT64_C(0x0000ffff0000ffff); + Q_CONSTEXPR quint64 round = Q_UINT64_C(0x0000008000000080); + quint64 ga = (rgba >> 16) & mask; + quint64 rb = rgba & mask; + ga += round; + rb += round; + ga -= ga >> 8; + rb -= rb >> 8; + uint a = (ga >> 16) & 0xff000000; + uint g = ga & 0x0000ff00; + uint r = (rb << 8) & 0x00ff0000; + uint b = rb >> 40; + return a | r | g | b; } Q_DECL_CONSTEXPR ushort toRgb16() const {