diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2014-01-29 11:41:31 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-10 12:49:06 +0100 |
commit | a7b8ef08415b8056661c3db5950842ee546891b9 (patch) | |
tree | f010dbec1421980535be48705b51b7c62d079a16 /src/gui/painting/qcolor.cpp | |
parent | 143d591aab7a2d244913e9d13f079de05eb7a65c (diff) |
Export optimized premultiply and unpremultiply methods
This patch optimizes the unpremultiply method further by using a
lookup table to avoid any divisions at all.
The opportunity is taken to export both premultiply and unpremultiply
since they are commonly used methods relevant to the exported QRgb type
that can be both premultiplied and unpremultipled ARGB.
[ChangeLog][QtGui][QColor] Exported highly optimized methods for
premultiply and unpremultiply of QRgb values.
Change-Id: I658bcf57b0bc73c34c1765b64617d43b63ae820b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Diffstat (limited to 'src/gui/painting/qcolor.cpp')
-rw-r--r-- | src/gui/painting/qcolor.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index 706273c151..b9d3ca888e 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -2499,6 +2499,41 @@ QDataStream &operator>>(QDataStream &stream, QColor &color) } #endif // QT_NO_DATASTREAM +// A table of precalculated results of 0x00ff00ff/alpha use by qUnpremultiply: +const uint qt_inv_premul_factor[256] = { + 0, 16711935, 8355967, 5570645, 4177983, 3342387, 2785322, 2387419, + 2088991, 1856881, 1671193, 1519266, 1392661, 1285533, 1193709, 1114129, + 1044495, 983055, 928440, 879575, 835596, 795806, 759633, 726605, + 696330, 668477, 642766, 618960, 596854, 576273, 557064, 539094, + 522247, 506422, 491527, 477483, 464220, 451673, 439787, 428511, + 417798, 407608, 397903, 388649, 379816, 371376, 363302, 355573, + 348165, 341059, 334238, 327685, 321383, 315319, 309480, 303853, + 298427, 293191, 288136, 283253, 278532, 273966, 269547, 265268, + 261123, 257106, 253211, 249431, 245763, 242201, 238741, 235379, + 232110, 228930, 225836, 222825, 219893, 217038, 214255, 211543, + 208899, 206320, 203804, 201348, 198951, 196611, 194324, 192091, + 189908, 187774, 185688, 183647, 181651, 179698, 177786, 175915, + 174082, 172287, 170529, 168807, 167119, 165464, 163842, 162251, + 160691, 159161, 157659, 156186, 154740, 153320, 151926, 150557, + 149213, 147893, 146595, 145321, 144068, 142837, 141626, 140436, + 139266, 138115, 136983, 135869, 134773, 133695, 132634, 131590, + 130561, 129549, 128553, 127572, 126605, 125653, 124715, 123792, + 122881, 121984, 121100, 120229, 119370, 118524, 117689, 116866, + 116055, 115254, 114465, 113686, 112918, 112160, 111412, 110675, + 109946, 109228, 108519, 107818, 107127, 106445, 105771, 105106, + 104449, 103800, 103160, 102527, 101902, 101284, 100674, 100071, + 99475, 98887, 98305, 97730, 97162, 96600, 96045, 95496, + 94954, 94417, 93887, 93362, 92844, 92331, 91823, 91322, + 90825, 90334, 89849, 89368, 88893, 88422, 87957, 87497, + 87041, 86590, 86143, 85702, 85264, 84832, 84403, 83979, + 83559, 83143, 82732, 82324, 81921, 81521, 81125, 80733, + 80345, 79961, 79580, 79203, 78829, 78459, 78093, 77729, + 77370, 77013, 76660, 76310, 75963, 75619, 75278, 74941, + 74606, 74275, 73946, 73620, 73297, 72977, 72660, 72346, + 72034, 71725, 71418, 71114, 70813, 70514, 70218, 69924, + 69633, 69344, 69057, 68773, 68491, 68211, 67934, 67659, + 67386, 67116, 66847, 66581, 66317, 66055, 65795, 65537 +}; /***************************************************************************** QColor global functions (documentation only) @@ -2581,6 +2616,26 @@ QDataStream &operator>>(QDataStream &stream, QColor &color) */ /*! + \fn QRgb qPremultiply(QRgb rgb) + \since 5.3 + \relates QColor + + Converts an unpremultiplied ARGB quadruplet \a rgb into a premultiplied ARGB quadruplet. + + \sa qUnpremultiply() +*/ + +/*! + \fn QRgb qUnpremultiply(QRgb rgb) + \since 5.3 + \relates QColor + + Converts a premultiplied ARGB quadruplet \a rgb into an unpremultiplied ARGB quadruplet. + + \sa qPremultiply() +*/ + +/*! \fn QColor QColor::convertTo(Spec colorSpec) const Creates a copy of \e this color in the format specified by \a colorSpec. |