diff --git a/image/SkImagePriv.cpp b/image/SkImagePriv.cpp
index eeeb9d8..a79f8db 100644
--- a/image/SkImagePriv.cpp
+++ b/image/SkImagePriv.cpp
@@ -9,15 +9,15 @@
 #include "SkCanvas.h"
 #include "SkPicture.h"
 
-SkBitmap::Config SkImageInfoToBitmapConfig(const SkImage::Info& info) {
+SkBitmap::Config SkImageInfoToBitmapConfig(const SkImageInfo& info) {
     switch (info.fColorType) {
-        case SkImage::kAlpha_8_ColorType:
+        case kAlpha_8_SkColorType:
             return SkBitmap::kA8_Config;
 
-        case SkImage::kRGB_565_ColorType:
+        case kRGB_565_SkColorType:
             return SkBitmap::kRGB_565_Config;
 
-        case SkImage::kPMColor_ColorType:
+        case kPMColor_SkColorType:
             return SkBitmap::kARGB_8888_Config;
 
         default:
@@ -27,31 +27,31 @@
     return SkBitmap::kNo_Config;
 }
 
-int SkImageBytesPerPixel(SkImage::ColorType ct) {
+int SkImageBytesPerPixel(SkColorType ct) {
     static const uint8_t gColorTypeBytesPerPixel[] = {
-        1,  // kAlpha_8_ColorType
-        2,  // kRGB_565_ColorType
-        4,  // kRGBA_8888_ColorType
-        4,  // kBGRA_8888_ColorType
-        4,  // kPMColor_ColorType
+        1,  // kAlpha_8_SkColorType
+        2,  // kRGB_565_SkColorType
+        4,  // kRGBA_8888_SkColorType
+        4,  // kBGRA_8888_SkColorType
+        4,  // kPMColor_SkColorType
     };
 
     SkASSERT((size_t)ct < SK_ARRAY_COUNT(gColorTypeBytesPerPixel));
     return gColorTypeBytesPerPixel[ct];
 }
 
-bool SkBitmapToImageInfo(const SkBitmap& bm, SkImage::Info* info) {
+bool SkBitmapToImageInfo(const SkBitmap& bm, SkImageInfo* info) {
     switch (bm.config()) {
         case SkBitmap::kA8_Config:
-            info->fColorType = SkImage::kAlpha_8_ColorType;
+            info->fColorType = kAlpha_8_SkColorType;
             break;
 
         case SkBitmap::kRGB_565_Config:
-            info->fColorType = SkImage::kRGB_565_ColorType;
+            info->fColorType = kRGB_565_SkColorType;
             break;
 
         case SkBitmap::kARGB_8888_Config:
-            info->fColorType = SkImage::kPMColor_ColorType;
+            info->fColorType = kPMColor_SkColorType;
             break;
 
         default:
@@ -66,7 +66,7 @@
 }
 
 SkImage* SkNewImageFromBitmap(const SkBitmap& bm, bool canSharePixelRef) {
-    SkImage::Info info;
+    SkImageInfo info;
     if (!SkBitmapToImageInfo(bm, &info)) {
         return NULL;
     }
diff --git a/image/SkImagePriv.h b/image/SkImagePriv.h
index 5d93605..188b16d 100644
--- a/image/SkImagePriv.h
+++ b/image/SkImagePriv.h
@@ -13,14 +13,14 @@
 
 class SkPicture;
 
-extern SkBitmap::Config SkImageInfoToBitmapConfig(const SkImage::Info&);
+extern SkBitmap::Config SkImageInfoToBitmapConfig(const SkImageInfo&);
 
-extern int SkImageBytesPerPixel(SkImage::ColorType);
+extern int SkImageBytesPerPixel(SkColorType);
 
-extern bool SkBitmapToImageInfo(const SkBitmap&, SkImage::Info*);
+extern bool SkBitmapToImageInfo(const SkBitmap&, SkImageInfo*);
 
 // Call this if you explicitly want to use/share this pixelRef in the image
-extern SkImage* SkNewImageFromPixelRef(const SkImage::Info&, SkPixelRef*,
+extern SkImage* SkNewImageFromPixelRef(const SkImageInfo&, SkPixelRef*,
                                        size_t rowBytes);
 
 /**
@@ -30,7 +30,7 @@
  *  is true.
  *
  *  If the bitmap's config cannot be converted into a corresponding
- *  SkImage::Info, or the bitmap's pixels cannot be accessed, this will return
+ *  SkImageInfo, or the bitmap's pixels cannot be accessed, this will return
  *  NULL.
  */
 extern SkImage* SkNewImageFromBitmap(const SkBitmap&, bool canSharePixelRef);
@@ -47,7 +47,7 @@
  */
 extern SkImage* SkNewImageFromPicture(const SkPicture*);
 
-static inline size_t SkImageMinRowBytes(const SkImage::Info& info) {
+static inline size_t SkImageMinRowBytes(const SkImageInfo& info) {
     size_t rb = info.fWidth * SkImageBytesPerPixel(info.fColorType);
     return SkAlign4(rb);
 }
diff --git a/image/SkImage_Raster.cpp b/image/SkImage_Raster.cpp
index a208d83..a872ae3 100644
--- a/image/SkImage_Raster.cpp
+++ b/image/SkImage_Raster.cpp
@@ -24,7 +24,7 @@
         if (info.fWidth > maxDimension || info.fHeight > maxDimension) {
             return false;
         }
-        if ((unsigned)info.fColorType > (unsigned)kLastEnum_ColorType) {
+        if ((unsigned)info.fColorType > (unsigned)kLastEnum_SkColorType) {
             return false;
         }
         if ((unsigned)info.fAlphaType > (unsigned)kLastEnum_SkAlphaType) {
@@ -50,7 +50,7 @@
 
     static SkImage* NewEmpty();
 
-    SkImage_Raster(const SkImage::Info&, SkData*, size_t rb);
+    SkImage_Raster(const SkImageInfo&, SkData*, size_t rb);
     virtual ~SkImage_Raster();
 
     virtual void onDraw(SkCanvas*, SkScalar, SkScalar, const SkPaint*) SK_OVERRIDE;
@@ -58,7 +58,7 @@
     virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE;
 
     // exposed for SkSurface_Raster via SkNewImageFromPixelRef
-    SkImage_Raster(const SkImage::Info&, SkPixelRef*, size_t rowBytes);
+    SkImage_Raster(const SkImageInfo&, SkPixelRef*, size_t rowBytes);
 
     SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); }
 
@@ -116,7 +116,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-SkImage* SkImage::NewRasterCopy(const SkImage::Info& info, const void* pixels, size_t rowBytes) {
+SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, size_t rowBytes) {
     if (!SkImage_Raster::ValidArgs(info, rowBytes)) {
         return NULL;
     }
@@ -134,7 +134,7 @@
 }
 
 
-SkImage* SkImage::NewRasterData(const SkImage::Info& info, SkData* pixelData, size_t rowBytes) {
+SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* pixelData, size_t rowBytes) {
     if (!SkImage_Raster::ValidArgs(info, rowBytes)) {
         return NULL;
     }
@@ -156,7 +156,7 @@
     return SkNEW_ARGS(SkImage_Raster, (info, data, rowBytes));
 }
 
-SkImage* SkNewImageFromPixelRef(const SkImage::Info& info, SkPixelRef* pr,
+SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
                                 size_t rowBytes) {
     return SkNEW_ARGS(SkImage_Raster, (info, pr, rowBytes));
 }
diff --git a/image/SkSurface.cpp b/image/SkSurface.cpp
index 1dff7ec..2fd4e10 100644
--- a/image/SkSurface.cpp
+++ b/image/SkSurface.cpp
@@ -101,7 +101,7 @@
     return image;
 }
 
-SkSurface* SkSurface::newSurface(const SkImage::Info& info) {
+SkSurface* SkSurface::newSurface(const SkImageInfo& info) {
     return asSB(this)->onNewSurface(info);
 }
 
diff --git a/image/SkSurface_Base.h b/image/SkSurface_Base.h
index 6ea8d60..cbae5bc 100644
--- a/image/SkSurface_Base.h
+++ b/image/SkSurface_Base.h
@@ -24,7 +24,7 @@
      */
     virtual SkCanvas* onNewCanvas() = 0;
 
-    virtual SkSurface* onNewSurface(const SkImage::Info&) = 0;
+    virtual SkSurface* onNewSurface(const SkImageInfo&) = 0;
 
     /**
      *  Allocate an SkImage that represents the current contents of the surface.
diff --git a/image/SkSurface_Gpu.cpp b/image/SkSurface_Gpu.cpp
index 6c3f0ed..e9049ae 100644
--- a/image/SkSurface_Gpu.cpp
+++ b/image/SkSurface_Gpu.cpp
@@ -14,12 +14,12 @@
 public:
     SK_DECLARE_INST_COUNT(SkSurface_Gpu)
 
-    SkSurface_Gpu(GrContext*, const SkImage::Info&, int sampleCount);
+    SkSurface_Gpu(GrContext*, const SkImageInfo&, int sampleCount);
     SkSurface_Gpu(GrContext*, GrRenderTarget*);
     virtual ~SkSurface_Gpu();
 
     virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
-    virtual SkSurface* onNewSurface(const SkImage::Info&) SK_OVERRIDE;
+    virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
     virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
                         const SkPaint*) SK_OVERRIDE;
@@ -35,7 +35,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-SkSurface_Gpu::SkSurface_Gpu(GrContext* ctx, const SkImage::Info& info,
+SkSurface_Gpu::SkSurface_Gpu(GrContext* ctx, const SkImageInfo& info,
                              int sampleCount)
         : INHERITED(info.fWidth, info.fHeight) {
     SkBitmap::Config config = SkImageInfoToBitmapConfig(info);
@@ -64,7 +64,7 @@
     return SkNEW_ARGS(SkCanvas, (fDevice));
 }
 
-SkSurface* SkSurface_Gpu::onNewSurface(const SkImage::Info& info) {
+SkSurface* SkSurface_Gpu::onNewSurface(const SkImageInfo& info) {
     GrRenderTarget* rt = fDevice->accessRenderTarget();
     int sampleCount = rt->numSamples();
     return SkSurface::NewRenderTarget(fDevice->context(), info, sampleCount);
@@ -113,7 +113,7 @@
     return SkNEW_ARGS(SkSurface_Gpu, (ctx, target));
 }
 
-SkSurface* SkSurface::NewRenderTarget(GrContext* ctx, const SkImage::Info& info, int sampleCount) {
+SkSurface* SkSurface::NewRenderTarget(GrContext* ctx, const SkImageInfo& info, int sampleCount) {
     if (NULL == ctx) {
         return NULL;
     }
diff --git a/image/SkSurface_Picture.cpp b/image/SkSurface_Picture.cpp
index 915530c..8cfe6e8 100644
--- a/image/SkSurface_Picture.cpp
+++ b/image/SkSurface_Picture.cpp
@@ -20,7 +20,7 @@
     virtual ~SkSurface_Picture();
 
     virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
-    virtual SkSurface* onNewSurface(const SkImage::Info&) SK_OVERRIDE;
+    virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
     virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
                         const SkPaint*) SK_OVERRIDE;
@@ -51,7 +51,7 @@
     return canvas;
 }
 
-SkSurface* SkSurface_Picture::onNewSurface(const SkImage::Info& info) {
+SkSurface* SkSurface_Picture::onNewSurface(const SkImageInfo& info) {
     return SkSurface::NewPicture(info.fWidth, info.fHeight);
 }
 
@@ -59,9 +59,9 @@
     if (fPicture) {
         return SkNewImageFromPicture(fPicture);
     } else {
-        SkImage::Info info;
+        SkImageInfo info;
         info.fWidth = info.fHeight = 0;
-        info.fColorType = SkImage::kPMColor_ColorType;
+        info.fColorType = kPMColor_SkColorType;
         info.fAlphaType = kOpaque_SkAlphaType;
         return SkImage::NewRasterCopy(info, NULL, 0);
     }
diff --git a/image/SkSurface_Raster.cpp b/image/SkSurface_Raster.cpp
index 5beabf7..27db504 100644
--- a/image/SkSurface_Raster.cpp
+++ b/image/SkSurface_Raster.cpp
@@ -15,13 +15,13 @@
 
 class SkSurface_Raster : public SkSurface_Base {
 public:
-    static bool Valid(const SkImage::Info&, size_t rb = kIgnoreRowBytesValue);
+    static bool Valid(const SkImageInfo&, size_t rb = kIgnoreRowBytesValue);
 
-    SkSurface_Raster(const SkImage::Info&, void*, size_t rb);
-    SkSurface_Raster(const SkImage::Info&, SkPixelRef*, size_t rb);
+    SkSurface_Raster(const SkImageInfo&, void*, size_t rb);
+    SkSurface_Raster(const SkImageInfo&, SkPixelRef*, size_t rb);
 
     virtual SkCanvas* onNewCanvas() SK_OVERRIDE;
-    virtual SkSurface* onNewSurface(const SkImage::Info&) SK_OVERRIDE;
+    virtual SkSurface* onNewSurface(const SkImageInfo&) SK_OVERRIDE;
     virtual SkImage* onNewImageSnapshot() SK_OVERRIDE;
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
                         const SkPaint*) SK_OVERRIDE;
@@ -36,7 +36,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-bool SkSurface_Raster::Valid(const SkImage::Info& info, size_t rowBytes) {
+bool SkSurface_Raster::Valid(const SkImageInfo& info, size_t rowBytes) {
     static const size_t kMaxTotalSize = SK_MaxS32;
 
     SkBitmap::Config config = SkImageInfoToBitmapConfig(info);
@@ -80,7 +80,7 @@
     return true;
 }
 
-SkSurface_Raster::SkSurface_Raster(const SkImage::Info& info, void* pixels, size_t rb)
+SkSurface_Raster::SkSurface_Raster(const SkImageInfo& info, void* pixels, size_t rb)
         : INHERITED(info.fWidth, info.fHeight) {
     SkBitmap::Config config = SkImageInfoToBitmapConfig(info);
     fBitmap.setConfig(config, info.fWidth, info.fHeight, rb, info.fAlphaType);
@@ -88,7 +88,7 @@
     fWeOwnThePixels = false;    // We are "Direct"
 }
 
-SkSurface_Raster::SkSurface_Raster(const SkImage::Info& info, SkPixelRef* pr, size_t rb)
+SkSurface_Raster::SkSurface_Raster(const SkImageInfo& info, SkPixelRef* pr, size_t rb)
         : INHERITED(info.fWidth, info.fHeight) {
     SkBitmap::Config config = SkImageInfoToBitmapConfig(info);
     fBitmap.setConfig(config, info.fWidth, info.fHeight, rb, info.fAlphaType);
@@ -104,7 +104,7 @@
     return SkNEW_ARGS(SkCanvas, (fBitmap));
 }
 
-SkSurface* SkSurface_Raster::onNewSurface(const SkImage::Info& info) {
+SkSurface* SkSurface_Raster::onNewSurface(const SkImageInfo& info) {
     return SkSurface::NewRaster(info);
 }
 
@@ -139,7 +139,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-SkSurface* SkSurface::NewRasterDirect(const SkImage::Info& info, void* pixels, size_t rowBytes) {
+SkSurface* SkSurface::NewRasterDirect(const SkImageInfo& info, void* pixels, size_t rowBytes) {
     if (!SkSurface_Raster::Valid(info, rowBytes)) {
         return NULL;
     }
@@ -150,7 +150,7 @@
     return SkNEW_ARGS(SkSurface_Raster, (info, pixels, rowBytes));
 }
 
-SkSurface* SkSurface::NewRaster(const SkImage::Info& info) {
+SkSurface* SkSurface::NewRaster(const SkImageInfo& info) {
     if (!SkSurface_Raster::Valid(info)) {
         return NULL;
     }
diff --git a/images/SkImageDecoder.cpp b/images/SkImageDecoder.cpp
index 74c80bc..1ba9365 100644
--- a/images/SkImageDecoder.cpp
+++ b/images/SkImageDecoder.cpp
@@ -403,7 +403,7 @@
 }
 
 bool SkImageDecoder::DecodeMemoryToTarget(const void* buffer, size_t size,
-                                          SkImage::Info* info,
+                                          SkImageInfo* info,
                                           const SkBitmapFactory::Target* target) {
     // FIXME: Just to get this working, implement in terms of existing
     // ImageDecoder calls.
diff --git a/lazy/SkBitmapFactory.cpp b/lazy/SkBitmapFactory.cpp
index 5464851..1bbb6f0 100644
--- a/lazy/SkBitmapFactory.cpp
+++ b/lazy/SkBitmapFactory.cpp
@@ -48,7 +48,7 @@
         return false;
     }
 
-    SkImage::Info info;
+    SkImageInfo info;
     if (!fDecodeProc(data->data(), data->size(), &info, NULL)) {
         return false;
     }
diff --git a/lazy/SkLazyPixelRef.cpp b/lazy/SkLazyPixelRef.cpp
index 59df15f..c2ca041 100644
--- a/lazy/SkLazyPixelRef.cpp
+++ b/lazy/SkLazyPixelRef.cpp
@@ -68,7 +68,7 @@
     fImageCache->unref();
 }
 
-static size_t ComputeMinRowBytesAndSize(const SkImage::Info& info, size_t* rowBytes) {
+static size_t ComputeMinRowBytesAndSize(const SkImageInfo& info, size_t* rowBytes) {
     *rowBytes = SkImageMinRowBytes(info);
 
     Sk64 safeSize;
@@ -80,9 +80,9 @@
     return safeSize.is32() ? safeSize.get32() : 0;
 }
 
-const SkImage::Info* SkLazyPixelRef::getCachedInfo() {
+const SkImageInfo* SkLazyPixelRef::getCachedInfo() {
     if (fLazilyCachedInfo.fWidth < 0) {
-        SkImage::Info info;
+        SkImageInfo info;
         fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, NULL);
         if (fErrorInDecoding) {
             return NULL;
@@ -94,7 +94,7 @@
 
 /**
    Returns bitmap->getPixels() on success; NULL on failure */
-static void* decode_into_bitmap(SkImage::Info* info,
+static void* decode_into_bitmap(SkImageInfo* info,
                                 SkBitmapFactory::DecodeProc decodeProc,
                                 size_t* rowBytes,
                                 SkData* data,
@@ -122,7 +122,7 @@
     SkASSERT(!fErrorInDecoding);
     SkASSERT(NULL == fImageCache);
     SkBitmap bitmap;
-    const SkImage::Info* info = this->getCachedInfo();
+    const SkImageInfo* info = this->getCachedInfo();
     if (info == NULL) {
         return NULL;
     }
@@ -147,7 +147,7 @@
         return pixels;
     } else {
         // Cache has been purged, must re-decode.
-        void* pixels = decode_into_bitmap(const_cast<SkImage::Info*>(info),
+        void* pixels = decode_into_bitmap(const_cast<SkImageInfo*>(info),
                                           fDecodeProc, &fRowBytes, fData,
                                           &bitmap);
         if (NULL == pixels) {
@@ -204,7 +204,7 @@
 
     SkASSERT(fData != NULL && fData->size() > 0);
     if (NULL == target.fAddr) {
-        const SkImage::Info* info = this->getCachedInfo();
+        const SkImageInfo* info = this->getCachedInfo();
         if (NULL == info) {
             SkASSERT(SkImageCache::UNINITIALIZED_ID == fCacheId);
             return NULL;
@@ -262,7 +262,7 @@
     return fData;
 }
 
-static bool init_from_info(SkBitmap* bm, const SkImage::Info& info,
+static bool init_from_info(SkBitmap* bm, const SkImageInfo& info,
                            size_t rowBytes) {
     SkBitmap::Config config = SkImageInfoToBitmapConfig(info);
     if (SkBitmap::kNo_Config == config) {
@@ -284,7 +284,7 @@
         return false;
     }
 
-    SkImage::Info info;
+    SkImageInfo info;
     // Determine the size of the image in order to determine how much memory to allocate.
     // FIXME: As an optimization, only do this part once.
     fErrorInDecoding = !fDecodeProc(fData->data(), fData->size(), &info, NULL);
diff --git a/lazy/SkLazyPixelRef.h b/lazy/SkLazyPixelRef.h
index c7fbd7b..f8a16d1 100644
--- a/lazy/SkLazyPixelRef.h
+++ b/lazy/SkLazyPixelRef.h
@@ -77,7 +77,7 @@
         SkScaledImageCache::ID* fScaledCacheId;
     };
     size_t                      fRowBytes;
-    SkImage::Info               fLazilyCachedInfo;
+    SkImageInfo                 fLazilyCachedInfo;
 
 #if LAZY_CACHE_STATS
     static int32_t              gCacheHits;
diff --git a/ports/SkImageDecoder_empty.cpp b/ports/SkImageDecoder_empty.cpp
index ff2fa02..8a45dfa 100644
--- a/ports/SkImageDecoder_empty.cpp
+++ b/ports/SkImageDecoder_empty.cpp
@@ -84,7 +84,7 @@
 
 void SkImageDecoder::setSampleSize(int) {}
 
-bool SkImageDecoder::DecodeMemoryToTarget(const void*, size_t, SkImage::Info*,
+bool SkImageDecoder::DecodeMemoryToTarget(const void*, size_t, SkImageInfo*,
                                           const SkBitmapFactory::Target*) {
     return false;
 }
