• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 class SK_API SkUnPreMultiply {
19 public:
20     typedef uint32_t Scale;
21 
22     // index this table with alpha [0..255]
GetScaleTable()23     static const Scale* GetScaleTable() {
24         return gTable;
25     }
26 
GetScale(U8CPU alpha)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     */
ApplyScale(Scale scale,U8CPU component)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 
54 private:
55     static const uint32_t gTable[256];
56 };
57 
58 #endif
59