/*
* Image.cpp
* iphone-gl-app
*
* Created by John Ryland on 15/06/09.
* Copyright 2009 InvertedLogic. All rights reserved.
*
*/
#include "Debug.h"
#include <QuartzCore/QuartzCore.h>
#include "Image.h"
#include "FileSystem.h"
struct ImagePrivate
{
unsigned int w;
unsigned int h;
unsigned char *b;
};
Image::Image(const char *file)
{
ImagePrivate *d = new ImagePrivate();
dptr = (void *)d;
d->w = 0;
d->h = 0;
d->b = 0;
File f(file);
CGDataProviderRef provider = CGDataProviderCreateWithURL(f.toMacURL_rel());
CGImageRef image = NULL;
if ( !strcmp(f.extension(), ".png") )
image = CGImageCreateWithPNGDataProvider(provider, NULL, false, kCGRenderingIntentDefault);
else if ( !strcmp(f.extension(), ".jpg") )
image = CGImageCreateWithJPEGDataProvider(provider, NULL, false, kCGRenderingIntentDefault);
else {
// ### Error, unsupported file type
}
if (image) {
d->w = CGImageGetWidth(image);
d->h = CGImageGetHeight(image);
d->b = (unsigned char *)malloc(d->w * d->h * 4);
CGContextRef context = CGBitmapContextCreate(d->b, d->w, d->h, 8, d->w * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(context, CGRectMake(0.0, 0.0, (CGFloat)d->w-0.0, (CGFloat)d->h-0.0), image);
CGContextRelease(context);
CGImageRelease(image);
}
if (provider)
CGDataProviderRelease(provider);
}
Image::~Image()
{
free(((ImagePrivate *)(dptr))->b);
delete (ImagePrivate *)dptr;
}
unsigned int Image::width()
{
return ((ImagePrivate *)(dptr))->w;
}
unsigned int Image::height()
{
return ((ImagePrivate *)(dptr))->h;
}
unsigned char *Image::data()
{
return ((ImagePrivate *)(dptr))->b;
}