/* * Copyright 2008 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkUnPreMultiply_DEFINED #define SkUnPreMultiply_DEFINED #include "SkColor.h" class SK_API 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); static uint32_t UnPreMultiplyPreservingByteOrder(SkPMColor c); private: static const uint32_t gTable[256]; }; #endif