diff options
Diffstat (limited to 'skia/include/SkUnPreMultiply.h')
-rw-r--r-- | skia/include/SkUnPreMultiply.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/skia/include/SkUnPreMultiply.h b/skia/include/SkUnPreMultiply.h new file mode 100644 index 0000000..bbbcea1 --- /dev/null +++ b/skia/include/SkUnPreMultiply.h @@ -0,0 +1,47 @@ + + + +#ifndef SkUnPreMultiply_DEFINED +#define SkUnPreMultiply_DEFINED + +#include "SkColor.h" + +class SkUnPreMultiply { +public: + typedef uint32_t Scale; + + // index this table with alpha [0..255] + static const Scale* GetScaleTable() { + return gTable; + } + + static Scale GetScale(U8CPU alpha) { + SkASSERT(alpha <= 255); + return gTable[alpha]; + } + + /** Usage: + + const Scale* table = SkUnPreMultiply::GetScaleTable(); + + for (...) { + unsigned a = ... + SkUnPreMultiply::Scale scale = table[a]; + + red = SkUnPreMultiply::ApplyScale(scale, red); + ... + // now red is unpremultiplied + } + */ + static U8CPU ApplyScale(Scale scale, U8CPU component) { + SkASSERT(component <= 255); + return (scale * component + (1 << 23)) >> 24; + } + + static SkColor PMColorToColor(SkPMColor c); + +private: + static const uint32_t gTable[256]; +}; + +#endif |