blob: fc4316a56e5caf87cb258b9d024a64af008b14e1 [file] [log] [blame]
yangsu@google.com1a2b4c12011-06-24 17:20:50 +00001/*
2 Copyright 2010, Tetrark Inc.
3*/
4
5#import <CoreGraphics/CoreGraphics.h>
6#include <CoreGraphics/CGColorSpace.h>
7#import <UIKit/UIKit.h>
8
9#include "SkImageDecoder.h"
10#include "SkImageEncoder.h"
11#include "SkMovie.h"
12#include "SkStream_NSData.h"
13
14class SkImageDecoder_iOS : public SkImageDecoder {
15protected:
16 virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode);
17};
18
19#define BITMAP_INFO (kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast)
20
21bool SkImageDecoder_iOS::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) {
22
23 NSData* data = NSData_dataWithStream(stream);
24
25 UIImage* uimage = [UIImage imageWithData:data];
26
27 const int width = uimage.size.width;
28 const int height = uimage.size.height;
29 bm->setConfig(SkBitmap::kARGB_8888_Config, width, height);
30 if (SkImageDecoder::kDecodeBounds_Mode == mode) {
31 return true;
32 }
33
34 if (!this->allocPixelRef(bm, NULL)) {
35 return false;
36 }
37
38 bm->lockPixels();
39 bm->eraseColor(0);
40
41 CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
42 CGContextRef cg = CGBitmapContextCreate(bm->getPixels(), width, height,
43 8, bm->rowBytes(), cs, BITMAP_INFO);
44 CGContextDrawImage(cg, CGRectMake(0, 0, width, height), uimage.CGImage);
45 CGContextRelease(cg);
46 CGColorSpaceRelease(cs);
47
48 bm->unlockPixels();
49 return true;
50}
51
52/////////////////////////////////////////////////////////////////////////
53
54SkImageDecoder* SkImageDecoder::Factory(SkStream* stream) {
55 return new SkImageDecoder_iOS;
56}
57
58SkMovie* SkMovie::DecodeStream(SkStream* stream) {
59 return NULL;
60}
61
62SkImageEncoder* SkImageEncoder::Create(Type t) {
63 return NULL;
64}
65