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;
}
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) {
}
bm->setAlphaType(kUnpremul_SkAlphaType);
}
- bm->unlockPixels();
return true;
}
// <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;