add asComponentTable() query (will impl in SkTableColorFilter next)
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 5 Jan 2012 17:24:35 +0000 (17:24 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 5 Jan 2012 17:24:35 +0000 (17:24 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@2971 2bbb7eff-a529-9590-31e7-b0007b416f81

include/core/SkColorFilter.h
src/core/SkColorFilter.cpp

index 6328e70..97db5cc 100644 (file)
@@ -30,6 +30,24 @@ public:
      */
     virtual bool asColorMatrix(SkScalar matrix[20]);
 
+    /**
+     *  If the filter can be represented by per-component table, return true,
+     *  and if table is not null, copy the bitmap containing the table into it.
+     *
+     *  The table bitmap will be in SkBitmap::kA8_Config. Each row corresponding
+     *  to each component in ARGB order. e.g. row[0] == alpha, row[1] == red,
+     *  etc. To transform a color, you (logically) perform the following:
+     *
+     *      a' = *table.getAddr8(a, 0);
+     *      r' = *table.getAddr8(r, 1);
+     *      g' = *table.getAddr8(g, 2);
+     *      b' = *table.getAddr8(b, 3);
+     *
+     *  The original component value is the horizontal index for a given row,
+     *  and the stored value at that index is the new value for that component.
+     */
+    virtual bool asComponentTable(SkBitmap* table);
+
     /** Called with a scanline of colors, as if there was a shader installed.
         The implementation writes out its filtered version into result[].
         Note: shader and result may be the same buffer.
index 996a7e5..2ca88bb 100644 (file)
@@ -19,6 +19,10 @@ bool SkColorFilter::asColorMatrix(SkScalar matrix[20]) {
     return false;
 }
 
+bool SkColorFilter::asComponentTable(SkBitmap*) {
+    return false;
+}
+
 void SkColorFilter::filterSpan16(const uint16_t s[], int count, uint16_t d[]) {
     SkASSERT(this->getFlags() & SkColorFilter::kHasFilter16_Flag);
     SkDEBUGFAIL("missing implementation of SkColorFilter::filterSpan16");