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