add SkPixmap and external locking to bitmaps

BUG=skia:

Review URL: https://codereview.chromium.org/1074983003
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index 01318fd..daa50dc 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -111,6 +111,17 @@
     return value <= kLastEnum_SkColorType;
 }
 
+static inline size_t SkColorTypeComputeOffset(SkColorType ct, int x, int y, size_t rowBytes) {
+    int shift = 0;
+    switch (SkColorTypeBytesPerPixel(ct)) {
+        case 4: shift = 2; break;
+        case 2: shift = 1; break;
+        case 1: shift = 0; break;
+        default: return 0;
+    }
+    return y * rowBytes + (x << shift);
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 /**
@@ -247,6 +258,12 @@
         return (size_t)this->minRowBytes64();
     }
 
+    size_t computeOffset(int x, int y, size_t rowBytes) const {
+        SkASSERT((unsigned)x < (unsigned)fWidth);
+        SkASSERT((unsigned)y < (unsigned)fHeight);
+        return SkColorTypeComputeOffset(fColorType, x, y, rowBytes);
+    }
+
     bool operator==(const SkImageInfo& other) const {
         return 0 == memcmp(this, &other, sizeof(other));
     }