make info real in SkPixelRef, and add bitmap::asImageInfo

BUG=
R=scroggo@google.com

Review URL: https://codereview.chromium.org/108663004

git-svn-id: http://skia.googlecode.com/svn/trunk@12586 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkImageInfo.h b/include/core/SkImageInfo.h
index c22249b..1165479 100644
--- a/include/core/SkImageInfo.h
+++ b/include/core/SkImageInfo.h
@@ -10,6 +10,9 @@
 
 #include "SkTypes.h"
 
+class SkFlattenableWriteBuffer;
+class SkFlattenableReadBuffer;
+
 /**
  *  Describes how to interpret the alpha compoent of a pixel.
  */
@@ -63,11 +66,12 @@
 enum SkColorType {
     kAlpha_8_SkColorType,
     kRGB_565_SkColorType,
+    kARGB_4444_SkColorType,
     kRGBA_8888_SkColorType,
     kBGRA_8888_SkColorType,
-    kIndex8_SkColorType,
+    kIndex_8_SkColorType,
 
-    kLastEnum_SkColorType = kIndex8_SkColorType,
+    kLastEnum_SkColorType = kIndex_8_SkColorType,
 
 #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
     kPMColor_SkColorType = kBGRA_8888_SkColorType
@@ -82,6 +86,7 @@
     static const uint8_t gSize[] = {
         1,  // Alpha_8
         2,  // RGB_565
+        2,  // ARGB_4444
         4,  // RGBA_8888
         4,  // BGRA_8888
         1,  // kIndex_8
@@ -112,12 +117,26 @@
         return SkColorTypeBytesPerPixel(fColorType);
     }
 
+    size_t minRowBytes() const {
+        return fWidth * this->bytesPerPixel();
+    }
+
     bool operator==(const SkImageInfo& other) const {
         return 0 == memcmp(this, &other, sizeof(other));
     }
     bool operator!=(const SkImageInfo& other) const {
         return 0 != memcmp(this, &other, sizeof(other));
     }
+
+    void unflatten(SkFlattenableReadBuffer&);
+    void flatten(SkFlattenableWriteBuffer&) const;
+
+    size_t getSafeSize(size_t rowBytes) const {
+        if (0 == fHeight) {
+            return 0;
+        }
+        return (fHeight - 1) * rowBytes + fWidth * this->bytesPerPixel();
+    }
 };
 
 #endif