// // Lol Engine // // Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To // Public License, Version 2, as published by Sam Hocevar. See // http://sam.zoy.org/projects/COPYING.WTFPL for more details. // #if defined HAVE_CONFIG_H # include "config.h" #endif #if defined __APPLE__ && defined __MACH__ && defined __arm__ #include <cmath> #import <UIKit/UIKit.h> #include "core.h" #include "../../image/image-private.h" using namespace std; namespace lol { /* * Image implementation class */ DECLARE_IMAGE_LOADER(IosImageData, 100) { public: virtual bool Open(char const *); virtual bool Close(); virtual void *GetData() const; private: uint8_t *pixels; }; /* * Public Image class */ bool IosImageData::Open(char const *path) { NSString *fullpath = [NSString stringWithUTF8String:path]; NSArray *chunks = [fullpath componentsSeparatedByString: @"/"]; NSString *filename = [chunks objectAtIndex: [chunks count] - 1]; chunks = [filename componentsSeparatedByString: @"."]; NSString *prefix = [chunks objectAtIndex: 0]; NSString *mypath = [[NSBundle mainBundle] pathForResource:prefix ofType:@"png"]; NSData *pngdata = [[NSData alloc] initWithContentsOfFile:mypath]; UIImage *image = [[UIImage alloc] initWithData:pngdata]; if (!image) { #if !LOL_RELEASE Log::Error("could not load %s\n", path); #endif return false; } int w = CGImageGetWidth(image.CGImage); int h = CGImageGetHeight(image.CGImage); size = ivec2(w, h); format = FORMAT_RGBA; CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB(); pixels = (uint8_t *)malloc(w * h * 4); CGContextRef ctx = CGBitmapContextCreate(pixels, w, h, 8, 4 * w, cspace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); CGColorSpaceRelease(cspace); CGContextClearRect(ctx, CGRectMake(0, 0, w, h)); CGContextTranslateCTM(ctx, 0, h - h); CGContextDrawImage(ctx, CGRectMake(0, 0, w, h), image.CGImage); CGContextRelease(ctx); [image release]; [pngdata release]; return true; } bool IosImageData::Close() { free(pixels); return true; } void * IosImageData::GetData() const { return pixels; } } /* namespace lol */ #endif /* defined __APPLE__ && defined __MACH__ && defined __arm__ */