gfx/skia/trunk/src/utils/ios/SkImageDecoder_iOS.mm

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:5d3631c9d1b1
1 /*
2 * Copyright 2010 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #import <CoreGraphics/CoreGraphics.h>
9 #include <CoreGraphics/CGColorSpace.h>
10 #import <UIKit/UIKit.h>
11
12 #include "SkImageDecoder.h"
13 #include "SkImageEncoder.h"
14 #include "SkMovie.h"
15 #include "SkStream_NSData.h"
16
17 class SkImageDecoder_iOS : public SkImageDecoder {
18 protected:
19 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode);
20 };
21
22 #define BITMAP_INFO (kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast)
23
24 bool SkImageDecoder_iOS::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
25
26 NSData* data = NSData_dataWithStream(stream);
27
28 UIImage* uimage = [UIImage imageWithData:data];
29
30 const int width = uimage.size.width;
31 const int height = uimage.size.height;
32 bm->setConfig(SkBitmap::kARGB_8888_Config, width, height);
33 if (SkImageDecoder::kDecodeBounds_Mode == mode) {
34 return true;
35 }
36
37 if (!this->allocPixelRef(bm, NULL)) {
38 return false;
39 }
40
41 bm->lockPixels();
42 bm->eraseColor(0);
43
44 CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
45 CGContextRef cg = CGBitmapContextCreate(bm->getPixels(), width, height,
46 8, bm->rowBytes(), cs, BITMAP_INFO);
47 CGContextDrawImage(cg, CGRectMake(0, 0, width, height), uimage.CGImage);
48 CGContextRelease(cg);
49 CGColorSpaceRelease(cs);
50
51 bm->unlockPixels();
52 return true;
53 }
54
55 /////////////////////////////////////////////////////////////////////////
56
57 SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) {
58 return new SkImageDecoder_iOS;
59 }
60
61 SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) {
62 return NULL;
63 }
64
65 SkImageEncoder* SkImageEncoder::Create(Type t) {
66 return NULL;
67 }
68

mercurial