blob: f3db65e03552f7b22b88709cd3e657769f77cc35 [file] [log] [blame]
yangsu@google.com1a2b4c12011-06-24 17:20:50 +00001/*
epoger@google.comfd03db02011-07-28 14:24:55 +00002 * 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 */
yangsu@google.com1a2b4c12011-06-24 17:20:50 +00007
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
17class SkImageDecoder_iOS : public SkImageDecoder {
18protected:
19 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode);
20};
21
22#define BITMAP_INFO (kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast)
23
24bool 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;
jvanverth8a243372014-06-24 11:06:02 -070032 bm->setInfo(SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType), 0);
yangsu@google.com1a2b4c12011-06-24 17:20:50 +000033 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
scroggo@google.com50955db2013-09-25 22:10:04 +000057SkImageDecoder* SkImageDecoder::Factory(SkStreamRewindable* stream) {
yangsu@google.com1a2b4c12011-06-24 17:20:50 +000058 return new SkImageDecoder_iOS;
59}
60
scroggo@google.com50955db2013-09-25 22:10:04 +000061SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) {
yangsu@google.com1a2b4c12011-06-24 17:20:50 +000062 return NULL;
63}
64
yangsu@google.com1a2b4c12011-06-24 17:20:50 +000065