/*
 *  ratlibimage.h
 *  RatLib
 *
 *  Created by Curtis Jones on 2009.11.13.
 *  Copyright 2009 __MyCompanyName__. All rights reserved.
 *
 */

#ifndef __RATLIB_IMAGE_H__
#define __RATLIB_IMAGE_H__

#include "cobject.h"
#include "opool.h"
#include "ratlibpoint.h"
#include <stdint.h>

#define RATLIB_IMAGE_OPTION_ALPHA_FIRST (1<<0)
#define RATLIB_IMAGE_OPTION_ALPHA_LAST  (1<<1)

//
// pixel
//
struct pixel
{
	uint8_t r;												// red
	uint8_t g;												// green
	uint8_t b;												// blue
	uint8_t a;												// alpha
};
typedef struct pixel pixel_t;

//
// ratlibimage
//
struct ratlibimage
{
	cobject_t cobject;								// super class
	
	pixel_t *data;										// 
	uint32_t size;										// size of data (in bytes)
	
	uint32_t width;										// image width (in pixels)
	uint32_t height;									// image height (in pixels)
};
typedef struct ratlibimage ratlibimage_t;

/**
 * ratlibimage, pool, data, options, bytes per pixel, width, height
 */
int ratlibimage_init (ratlibimage_t*, opool_t*, const uint8_t*, uint32_t, uint32_t, uint32_t, uint32_t);

/**
 *
 */
int ratlibimage_destroy (ratlibimage_t*);

/**
 *
 */
pixel_t* ratlibimage_pixelatpoint (ratlibimage_t*, ratlibpoint_t*);

/**
 *
 */
ratlibimage_t* ratlibimage_retain (ratlibimage_t*);

/**
 *
 */
void ratlibimage_release (ratlibimage_t*);

/**
 *
 */
int pixel_equals (pixel_t*, pixel_t*);

/**
 *
 */
int pixel_similar (pixel_t*, pixel_t*);

#endif /* __RATLIB_IMAGE_H__ */
