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 "include/core/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
52private:
53 static const uint32_t gTable[256];
54};
55
56#endif
57