15bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com 2f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/* 35bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2008 The Android Open Source Project 4f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com * 55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be 65bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file. 7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */ 8f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 9f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 125bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com 13f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkUnPreMultiply_DEFINED 14f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkUnPreMultiply_DEFINED 15f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 16f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkColor.h" 17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 182083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.orgclass SK_API SkUnPreMultiply { 19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic: 20f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com typedef uint32_t Scale; 211fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 22f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com // index this table with alpha [0..255] 23f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com static const Scale* GetScaleTable() { 24f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com return gTable; 25f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com } 26f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 27f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com static Scale GetScale(U8CPU alpha) { 28f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkASSERT(alpha <= 255); 29f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com return gTable[alpha]; 30f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com } 311fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 32f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com /** Usage: 331fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 34f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com const Scale* table = SkUnPreMultiply::GetScaleTable(); 351fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 36f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com for (...) { 37f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com unsigned a = ... 38f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkUnPreMultiply::Scale scale = table[a]; 391fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 40f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com red = SkUnPreMultiply::ApplyScale(scale, red); 41f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com ... 42f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com // now red is unpremultiplied 43f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com } 44f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */ 45f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com static U8CPU ApplyScale(Scale scale, U8CPU component) { 46f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com SkASSERT(component <= 255); 47f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com return (scale * component + (1 << 23)) >> 24; 48f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com } 491fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 50f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com static SkColor PMColorToColor(SkPMColor c); 511fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com 52f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate: 53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com static const uint32_t gTable[256]; 54f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com}; 55f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com 56f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif 57