expose CGImage -> SkBitmap

BUG=skia:
R=scroggo@google.com, halcanary@google.com

Author: reed@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@14315 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
index c683752..b82b677 100644
--- a/src/ports/SkImageDecoder_CG.cpp
+++ b/src/ports/SkImageDecoder_CG.cpp
@@ -68,7 +68,9 @@
 
     const int width = SkToInt(CGImageGetWidth(image));
     const int height = SkToInt(CGImageGetHeight(image));
-    bm->setConfig(SkBitmap::kARGB_8888_Config, width, height);
+    SkImageInfo skinfo = SkImageInfo::MakeN32Premul(width, height);
+
+    bm->setConfig(skinfo);
     if (SkImageDecoder::kDecodeBounds_Mode == mode) {
         return true;
     }
@@ -76,16 +78,12 @@
     if (!this->allocPixelRef(bm, NULL)) {
         return false;
     }
+    
+    SkAutoLockPixels alp(*bm);
 
-    bm->lockPixels();
-    bm->eraseColor(SK_ColorTRANSPARENT);
-
-    CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
-    CGContextRef cg = CGBitmapContextCreate(bm->getPixels(), width, height, 8, bm->rowBytes(), cs, BITMAP_INFO);
-    CFRelease(cs);
-
-    CGContextDrawImage(cg, CGRectMake(0, 0, width, height), image);
-    CGContextRelease(cg);
+    if (!SkCopyPixelsFromCGImage(bm->info(), bm->rowBytes(), bm->getPixels(), image)) {
+        return false;
+    }
 
     CGImageAlphaInfo info = CGImageGetAlphaInfo(image);
     switch (info) {
@@ -112,7 +110,6 @@
         }
         bm->setAlphaType(kUnpremul_SkAlphaType);
     }
-    bm->unlockPixels();
     return true;
 }