Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / ports / SkImageDecoder_CG.cpp
index c61ce98..fe22ea0 100644 (file)
@@ -68,7 +68,9 @@ bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
 
     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;
     }
@@ -77,15 +79,11 @@ bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
         return false;
     }
 
-    bm->lockPixels();
-    bm->eraseColor(SK_ColorTRANSPARENT);
-
-    CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
-    CGContextRef cg = CGBitmapContextCreate(bm->getPixels(), width, height, 8, bm->rowBytes(), cs, BITMAP_INFO);
-    CFRelease(cs);
+    SkAutoLockPixels alp(*bm);
 
-    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 @@ bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
         }
         bm->setAlphaType(kUnpremul_SkAlphaType);
     }
-    bm->unlockPixels();
     return true;
 }
 
@@ -209,7 +206,7 @@ bool SkImageEncoder_CG::onEncode(SkWStream* stream, const SkBitmap& bm,
             // <Error>: CGImageDestinationFinalize image destination does not have enough images
             // So instead we copy to 8888.
             if (bm.colorType() == kARGB_4444_SkColorType) {
-                bm.copyTo(&bitmap8888, kPMColor_SkColorType);
+                bm.copyTo(&bitmap8888, kN32_SkColorType);
                 bmPtr = &bitmap8888;
             }
             type = kUTTypePNG;