aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkImageDecoder_CG.cpp
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-22 20:24:33 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-04-22 20:24:33 +0000
commit60b5dce19984a5165f6b2f1d6d477f5e8a940761 (patch)
treeb54e4d9df7b9b1e03307be9f5043b0be92df6a2f /src/ports/SkImageDecoder_CG.cpp
parent945ec3a2bec668ca845071a65df8ec55e8f43819 (diff)
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
Diffstat (limited to 'src/ports/SkImageDecoder_CG.cpp')
-rw-r--r--src/ports/SkImageDecoder_CG.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
index c683752fdd..b82b677b66 100644
--- a/src/ports/SkImageDecoder_CG.cpp
+++ b/src/ports/SkImageDecoder_CG.cpp
@@ -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;
}
@@ -76,16 +78,12 @@ bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
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 @@ bool SkImageDecoder_CG::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
}
bm->setAlphaType(kUnpremul_SkAlphaType);
}
- bm->unlockPixels();
return true;
}