summaryrefslogtreecommitdiffstats
path: root/skia/include/SkUnPreMultiply.h
diff options
context:
space:
mode:
Diffstat (limited to 'skia/include/SkUnPreMultiply.h')
-rw-r--r--skia/include/SkUnPreMultiply.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/skia/include/SkUnPreMultiply.h b/skia/include/SkUnPreMultiply.h
new file mode 100644
index 0000000..bbbcea1
--- /dev/null
+++ b/skia/include/SkUnPreMultiply.h
@@ -0,0 +1,47 @@
+
+
+
+#ifndef SkUnPreMultiply_DEFINED
+#define SkUnPreMultiply_DEFINED
+
+#include "SkColor.h"
+
+class SkUnPreMultiply {
+public:
+ typedef uint32_t Scale;
+
+ // index this table with alpha [0..255]
+ static const Scale* GetScaleTable() {
+ return gTable;
+ }
+
+ static Scale GetScale(U8CPU alpha) {
+ SkASSERT(alpha <= 255);
+ return gTable[alpha];
+ }
+
+ /** Usage:
+
+ const Scale* table = SkUnPreMultiply::GetScaleTable();
+
+ for (...) {
+ unsigned a = ...
+ SkUnPreMultiply::Scale scale = table[a];
+
+ red = SkUnPreMultiply::ApplyScale(scale, red);
+ ...
+ // now red is unpremultiplied
+ }
+ */
+ static U8CPU ApplyScale(Scale scale, U8CPU component) {
+ SkASSERT(component <= 255);
+ return (scale * component + (1 << 23)) >> 24;
+ }
+
+ static SkColor PMColorToColor(SkPMColor c);
+
+private:
+ static const uint32_t gTable[256];
+};
+
+#endif