1
2/*
3 * Copyright 2008 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10
11
12
13#ifndef SkUnPreMultiply_DEFINED
14#define SkUnPreMultiply_DEFINED
15
16#include "SkColor.h"
17
18class SK_API SkUnPreMultiply {
19public:
20    typedef uint32_t Scale;
21
22    // index this table with alpha [0..255]
23    static const Scale* GetScaleTable() {
24        return gTable;
25    }
26
27    static Scale GetScale(U8CPU alpha) {
28        SkASSERT(alpha <= 255);
29        return gTable[alpha];
30    }
31
32    /** Usage:
33
34        const Scale* table = SkUnPreMultiply::GetScaleTable();
35
36        for (...) {
37            unsigned a = ...
38            SkUnPreMultiply::Scale scale = table[a];
39
40            red = SkUnPreMultiply::ApplyScale(scale, red);
41            ...
42            // now red is unpremultiplied
43        }
44    */
45    static U8CPU ApplyScale(Scale scale, U8CPU component) {
46        SkASSERT(component <= 255);
47        return (scale * component + (1 << 23)) >> 24;
48    }
49
50    static SkColor PMColorToColor(SkPMColor c);
51
52    static uint32_t UnPreMultiplyPreservingByteOrder(SkPMColor c);
53
54private:
55    static const uint32_t gTable[256];
56};
57
58#endif
59