Blame src/gdpp.h

Packit Service df60bb
/* *****************************************************************************
Packit Service df60bb
** $Id$
Packit Service df60bb
** Initial file written and documented by:
Packit Service df60bb
** Kevin Shepherd <kshepherd@php.net> December 2007
Packit Service df60bb
** of Scarlet Line http://www.scarletline.com/
Packit Service df60bb
** with contributions from Torben Nielsen.
Packit Service df60bb
*******************************************************************************/
Packit Service df60bb
/** \file gdpp.h
Packit Service df60bb
	\brief Object Oriented C++ wrappers around libgd functionality.
Packit Service df60bb
Packit Service df60bb
	Example usage, convert png to gif:
Packit Service df60bb
	#include <fstream>
Packit Service df60bb
	#include <gdpp.h>
Packit Service df60bb
Packit Service df60bb
	std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
Packit Service df60bb
	GD::Image im(in, GD::Png_tag());
Packit Service df60bb
	if (im.good())
Packit Service df60bb
		{
Packit Service df60bb
		std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
Packit Service df60bb
		im.Gif(out);
Packit Service df60bb
		}
Packit Service df60bb
*/
Packit Service df60bb
#ifdef __cplusplus
Packit Service df60bb
#ifndef _gdpp_h
Packit Service df60bb
#define _gdpp_h
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_CONFIG_H
Packit Service df60bb
#include "config.h"
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
#include "gd_io_stream.h"
Packit Service df60bb
#include <string>
Packit Service df60bb
Packit Service df60bb
/// namespace GD:: contains the C++ wrapper classes for libgd
Packit Service df60bb
/** This namespace is primarily to avoid name clashes, and to
Packit Service df60bb
	contain all of the gd classes within one namespace.
Packit Service df60bb
	It is not recommended to use the "using namespace" directive with this namespace.
Packit Service df60bb
	Example usage:
Packit Service df60bb
	GD::Image	im(64, 32, true); // Create a truecolor image 64 pixels wide by 32 pixels high
Packit Service df60bb
	GD::Point	pt(10, 8); // The point at x=10, y=8.
Packit Service df60bb
	GD::Size	sz(16, 8); // The size width=16, height=8.
Packit Service df60bb
	GD::TrueColor	col(0xFF, 0, 0); // The colour red; R=255, G=0, B=0.
Packit Service df60bb
	im.Rectangle(pt, sz, col.Int()); // Draw a red rectangle with top left corner at pt, of size sz.
Packit Service df60bb
*/
Packit Service df60bb
namespace GD
Packit Service df60bb
{
Packit Service df60bb
/**	This class GD::Point stores a point in two dimensions, somewhere
Packit Service df60bb
	on the plane of an image.
Packit Service df60bb
*/
Packit Service df60bb
class BGD_EXPORT_DATA_PROT Point
Packit Service df60bb
{
Packit Service df60bb
public:
Packit Service df60bb
	// Constructors
Packit Service df60bb
	Point(int x, int y)
Packit Service df60bb
		:_x(x), _y(y) {}
Packit Service df60bb
	Point(const Point & p)
Packit Service df60bb
		:_x(p._x), _y(p._y) {}
Packit Service df60bb
	Point()
Packit Service df60bb
		:_x(0), _y(0) {}
Packit Service df60bb
	Point & operator=(const Point & p) {
Packit Service df60bb
		_x = p._x;
Packit Service df60bb
		_y = p._y;
Packit Service df60bb
		return (* this);
Packit Service df60bb
	}
Packit Service df60bb
	// Accessors
Packit Service df60bb
	int X() const {
Packit Service df60bb
		return _x;
Packit Service df60bb
	}
Packit Service df60bb
	int Y() const {
Packit Service df60bb
		return _y;
Packit Service df60bb
	}
Packit Service df60bb
	// Updaters
Packit Service df60bb
	void X(int x) {
Packit Service df60bb
		_x = x;
Packit Service df60bb
	}
Packit Service df60bb
	void Y(int y) {
Packit Service df60bb
		_y = y;
Packit Service df60bb
	}
Packit Service df60bb
	void set(int x, int y) {
Packit Service df60bb
		_x = x;
Packit Service df60bb
		_y = y;
Packit Service df60bb
	}
Packit Service df60bb
	int & lhsX() {
Packit Service df60bb
		return _x;
Packit Service df60bb
	}
Packit Service df60bb
	int & lhsY() {
Packit Service df60bb
		return _y;
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	gdPointPtr as_gdPointPtr() {
Packit Service df60bb
		return (gdPointPtr) this;
Packit Service df60bb
	}
Packit Service df60bb
protected:
Packit Service df60bb
	int	_x, _y;
Packit Service df60bb
};
Packit Service df60bb
typedef Point * PointPtr;
Packit Service df60bb
/**	This class GD::Size stores length in two dimensions.
Packit Service df60bb
	Giving the size of an area as width and height.
Packit Service df60bb
*/
Packit Service df60bb
class BGD_EXPORT_DATA_PROT Size
Packit Service df60bb
{
Packit Service df60bb
public:
Packit Service df60bb
	// Constructors
Packit Service df60bb
	Size(int w, int h)
Packit Service df60bb
		:_w(w), _h(h) {}
Packit Service df60bb
	Size(const Size & p)
Packit Service df60bb
		:_w(p._w), _h(p._h) {}
Packit Service df60bb
	Size()
Packit Service df60bb
		:_w(0), _h(0) {}
Packit Service df60bb
	Size & operator=(const Size & p) {
Packit Service df60bb
		_w = p._w;
Packit Service df60bb
		_h = p._h;
Packit Service df60bb
		return (* this);
Packit Service df60bb
	}
Packit Service df60bb
	// Accessors
Packit Service df60bb
	int W() const {
Packit Service df60bb
		return _w;
Packit Service df60bb
	}
Packit Service df60bb
	int H() const {
Packit Service df60bb
		return _h;
Packit Service df60bb
	}
Packit Service df60bb
	// Updaters
Packit Service df60bb
	void W(int w) {
Packit Service df60bb
		_w = w;
Packit Service df60bb
	}
Packit Service df60bb
	void H(int h) {
Packit Service df60bb
		_h = h;
Packit Service df60bb
	}
Packit Service df60bb
	void set(int w, int h) {
Packit Service df60bb
		_w = w;
Packit Service df60bb
		_h = h;
Packit Service df60bb
	}
Packit Service df60bb
	int & lhsW() {
Packit Service df60bb
		return _w;
Packit Service df60bb
	}
Packit Service df60bb
	int & lhsH() {
Packit Service df60bb
		return _h;
Packit Service df60bb
	}
Packit Service df60bb
protected:
Packit Service df60bb
	int	_w, _h;
Packit Service df60bb
};
Packit Service df60bb
typedef Size * SizePtr;
Packit Service df60bb
Packit Service df60bb
/**	This class GD::TrueColor stores a colour as an RGBA quadruplet.
Packit Service df60bb
	It can also be read as an integer, and in other colour formats.
Packit Service df60bb
*/
Packit Service df60bb
class BGD_EXPORT_DATA_PROT TrueColor
Packit Service df60bb
{
Packit Service df60bb
public:
Packit Service df60bb
	union as_types {
Packit Service df60bb
		int as_int;
Packit Service df60bb
		struct uchars {
Packit Service df60bb
			unsigned char blue, green, red, alpha;
Packit Service df60bb
		} as_uchar;
Packit Service df60bb
	};
Packit Service df60bb
	TrueColor() {
Packit Service df60bb
		internal.as_int = 0;
Packit Service df60bb
	}
Packit Service df60bb
	TrueColor(int c) {
Packit Service df60bb
		internal.as_int = c;
Packit Service df60bb
	}
Packit Service df60bb
	TrueColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0) {
Packit Service df60bb
		internal.as_uchar.alpha = a;
Packit Service df60bb
		internal.as_uchar.red = r;
Packit Service df60bb
		internal.as_uchar.green = g;
Packit Service df60bb
		internal.as_uchar.blue = b;
Packit Service df60bb
	}
Packit Service df60bb
	// Accessors
Packit Service df60bb
	int Int() const {
Packit Service df60bb
		return internal.as_int;
Packit Service df60bb
	}
Packit Service df60bb
	unsigned char Red() const {
Packit Service df60bb
		return internal.as_uchar.red;
Packit Service df60bb
	}
Packit Service df60bb
	unsigned char Green() const {
Packit Service df60bb
		return internal.as_uchar.green;
Packit Service df60bb
	}
Packit Service df60bb
	unsigned char Blue() const {
Packit Service df60bb
		return internal.as_uchar.blue;
Packit Service df60bb
	}
Packit Service df60bb
	unsigned char Alpha() const {
Packit Service df60bb
		return internal.as_uchar.alpha;
Packit Service df60bb
	}
Packit Service df60bb
	// Updaters
Packit Service df60bb
	void set(int c) {
Packit Service df60bb
		internal.as_int = c;
Packit Service df60bb
	}
Packit Service df60bb
	void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0) {
Packit Service df60bb
		internal.as_uchar.alpha = a;
Packit Service df60bb
		internal.as_uchar.red = r;
Packit Service df60bb
		internal.as_uchar.green = g;
Packit Service df60bb
		internal.as_uchar.blue = b;
Packit Service df60bb
	}
Packit Service df60bb
	void Red(unsigned char c) {
Packit Service df60bb
		internal.as_uchar.red = c;
Packit Service df60bb
	}
Packit Service df60bb
	void Green(unsigned char c) {
Packit Service df60bb
		internal.as_uchar.green = c;
Packit Service df60bb
	}
Packit Service df60bb
	void Blue(unsigned char c) {
Packit Service df60bb
		internal.as_uchar.blue = c;
Packit Service df60bb
	}
Packit Service df60bb
	void Alpha(unsigned char c) {
Packit Service df60bb
		internal.as_uchar.alpha = c;
Packit Service df60bb
	}
Packit Service df60bb
protected:
Packit Service df60bb
	as_types internal;
Packit Service df60bb
};
Packit Service df60bb
/*	The following tags are simply empty structures which are used
Packit Service df60bb
	to tell the compiler which constructor we want when we know
Packit Service df60bb
	the image file format.
Packit Service df60bb
*/
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Png_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Gif_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT WBMP_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Jpeg_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Gd_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Gd2_tag {};
Packit Service df60bb
struct BGD_EXPORT_DATA_PROT Xbm_tag {};
Packit Service df60bb
Packit Service df60bb
/**	This class GD::Image wraps all of the 'C' libgd functionality
Packit Service df60bb
	for the convenience of C++ users.  An instance of this class
Packit Service df60bb
	corresponds to a single image.
Packit Service df60bb
*/
Packit Service df60bb
class BGD_EXPORT_DATA_PROT Image
Packit Service df60bb
{
Packit Service df60bb
public:
Packit Service df60bb
	/**	Construct a null image
Packit Service df60bb
	*/
Packit Service df60bb
	Image()
Packit Service df60bb
		:im(0)
Packit Service df60bb
	{}
Packit Service df60bb
	/** Construct a blank image, of the given size and colour format type.
Packit Service df60bb
		\param[in] sx Width of the image
Packit Service df60bb
		\param[in] sy Height of the image
Packit Service df60bb
		\param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int sx, int sy, bool istruecolor = false)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		if (istruecolor)
Packit Service df60bb
			CreateTrueColor(sx, sy);
Packit Service df60bb
		else
Packit Service df60bb
			Create(sx, sy);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct a blank image, of the given size and colour format type.
Packit Service df60bb
		\param[in] s Width and height of the image
Packit Service df60bb
		\param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
Packit Service df60bb
	*/
Packit Service df60bb
	Image(const Size & s, bool istruecolor = false)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		if (istruecolor)
Packit Service df60bb
			CreateTrueColor(s);
Packit Service df60bb
		else
Packit Service df60bb
			Create(s);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an instance of the GD::Image class, given the internal gdImage poimter.
Packit Service df60bb
		Note that gdImageDestroy will be called on the image pointer in the destructor.
Packit Service df60bb
		\param[in] i Pointer to the internal gdImage
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdImagePtr i)
Packit Service df60bb
		:im(i) {}
Packit Service df60bb
	/** Copy constructor. Construct an instance of the GD::Image class,
Packit Service df60bb
		by making a copy of the GD::Image provided.
Packit Service df60bb
		\param[in] i Reference to the image to be copied
Packit Service df60bb
	*/
Packit Service df60bb
	Image(const GD::Image & i)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		Copy(i);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.  This constructor
Packit Service df60bb
		will first attempt to determine the file format.
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFrom(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.  This constructor
Packit Service df60bb
		will first attempt to determine the file format.
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFrom(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.  This constructor
Packit Service df60bb
		will first attempt to determine the image formatting.
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFrom(size, data);
Packit Service df60bb
	}
Packit Service df60bb
#ifdef HAVE_LIBPNG
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, Png_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromPng(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Png_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromPng(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, Png_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromPng(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::Png_tag()); // read a png file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, Png_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromPng(size, data);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, Gif_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGif(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Gif_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGif(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, Gif_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGif(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::Gif_tag()); // read a gif file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, Gif_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGif(size, data);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, WBMP_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromWBMP(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, WBMP_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromWBMP(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, WBMP_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromWBMP(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::WBMP_tag()); // read a monchrome WBMP file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, WBMP_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromWBMP(size, data);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_LIBJPEG
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, Jpeg_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromJpeg(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Jpeg_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromJpeg(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, Jpeg_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromJpeg(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::Jpeg_tag()); // read a jpeg file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, Jpeg_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromJpeg(size, data);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, Gd_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Gd_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, Gd_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::Gd_tag()); // read a gd file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, Gd_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd(size, data);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
Packit Service df60bb
		\param[in] in The stream containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(std::istream & in, Gd2_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd2(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Gd2_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd2(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
Packit Service df60bb
		\param[in] in The io context from which to read the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(gdIOCtx * in, Gd2_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd2(in);
Packit Service df60bb
	}
Packit Service df60bb
	/** Construct an image by reading from memory block \p data.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(sz, dat, GD::Gd2_tag()); // read a gd2 file from dat
Packit Service df60bb
		\param[in] size The byte count of the memory block
Packit Service df60bb
		\param[in] data Pointer to the memory block
Packit Service df60bb
	*/
Packit Service df60bb
	Image(int size, void * data, Gd2_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromGd2(size, data);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/** Construct an image by reading from \p in.
Packit Service df60bb
		The tag is an empty struct which simply tells the compiler which image read function to use.
Packit Service df60bb
		e.g. GD::Image img(input, GD::Xbm_tag()); // read an xbm file from input
Packit Service df60bb
		\param[in] in An opened FILE * handle to a file containing the image data
Packit Service df60bb
	*/
Packit Service df60bb
	Image(FILE * in, Xbm_tag)
Packit Service df60bb
		:im(0) {
Packit Service df60bb
		CreateFromXbm(in);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	~Image() {
Packit Service df60bb
		clear();
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/** Assignment Operator. Make this a copy of the GD::Image provided.
Packit Service df60bb
		\param[in] src Reference to the image to be copied
Packit Service df60bb
	*/
Packit Service df60bb
	GD::Image & operator=(const GD::Image & src) {
Packit Service df60bb
		Copy(src);
Packit Service df60bb
		return (* this);
Packit Service df60bb
	}
Packit Service df60bb
	/** Make this an exact copy of the GD::Image provided.  Any existing iamge data is discarded.
Packit Service df60bb
		\param[in] src Reference to the image to be copied
Packit Service df60bb
	*/
Packit Service df60bb
	void Copy(const GD::Image & src) {
Packit Service df60bb
		int w = src.Width(), h = src.Height();
Packit Service df60bb
		if (src.IsTrueColor())
Packit Service df60bb
			CreateTrueColor(w, h);
Packit Service df60bb
		else {
Packit Service df60bb
			Create(w, h);
Packit Service df60bb
			PaletteCopy(src);
Packit Service df60bb
		}
Packit Service df60bb
		Copy(src, 0, 0, 0, 0, w, h);
Packit Service df60bb
	}
Packit Service df60bb
	/** Check to see if this appears to be a valid image
Packit Service df60bb
	*/
Packit Service df60bb
	bool good() const {
Packit Service df60bb
		return (im != 0);
Packit Service df60bb
	}
Packit Service df60bb
	// Creation:
Packit Service df60bb
	/**
Packit Service df60bb
		Create a palette-based image, with no more than 256 colors.
Packit Service df60bb
		\param sx Width of the desired image
Packit Service df60bb
		\param sy Height of the desired image
Packit Service df60bb
		\return true if it worked, else false
Packit Service df60bb
	*/
Packit Service df60bb
	bool Create(int sx, int sy) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreate(sx, sy)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Create a truecolor image.
Packit Service df60bb
		\param sx Width of the desired image
Packit Service df60bb
		\param sy Height of the desired image
Packit Service df60bb
		\return true if it worked, else false
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateTrueColor(int sx, int sy) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateTrueColor(sx, sy)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Create a palette-based image, with no more than 256 colors.
Packit Service df60bb
		\param s Width and height of the desired image
Packit Service df60bb
		\return true if it worked, else false
Packit Service df60bb
	*/
Packit Service df60bb
	bool Create(const Size & s) {
Packit Service df60bb
		return Create(s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Create a truecolor image.
Packit Service df60bb
		\param s Width and height of the desired image
Packit Service df60bb
		\return true if it worked, else false
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateTrueColor(const Size & s) {
Packit Service df60bb
		return CreateTrueColor(s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	// Create, determining the image format from the data
Packit Service df60bb
	/// Read an image from an open FILE * handle, after determining the image format
Packit Service df60bb
	bool CreateFrom(FILE * in);
Packit Service df60bb
	/// Read an image from an open standard library input stream, after determining the image format
Packit Service df60bb
	bool CreateFrom(std::istream & in);
Packit Service df60bb
	/// Read an image from a memory block, after determining the image format
Packit Service df60bb
	bool CreateFrom(int size, void * data);
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_LIBPNG
Packit Service df60bb
	// Png
Packit Service df60bb
	bool CreateFromPng(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromPng(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromPng(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromPngCtx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromPng(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromPngPtr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromPng(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromPngCtx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	// Gif
Packit Service df60bb
	bool CreateFromGif(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGif(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGif(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGifCtx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGif(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGifPtr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGif(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromGifCtx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	// WBMP
Packit Service df60bb
	bool CreateFromWBMP(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromWBMP(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromWBMP(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromWBMPCtx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromWBMP(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromWBMPPtr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromWBMP(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromWBMPCtx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_LIBJPEG
Packit Service df60bb
	// Jpeg
Packit Service df60bb
	/**
Packit Service df60bb
		Load a truecolor image from a JPEG format file.
Packit Service df60bb
		Invoke CreateFromJpeg with an already opened
Packit Service df60bb
		pointer to a file containing the desired image.
Packit Service df60bb
		CreateFromJpeg does not close the file.
Packit Service df60bb
		\return true for success, or false if unable to load the image (most often because
Packit Service df60bb
		the file is corrupt or does not contain a JPEG image).
Packit Service df60bb
		You can call Width() and Height() member functions of the image to determine its
Packit Service df60bb
		size. The returned image is always a truecolor image.
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateFromJpeg(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromJpeg(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Load a truecolor image from a JPEG format file.
Packit Service df60bb
		Invoke CreateFromJpeg with an already opened
Packit Service df60bb
		pointer to a file containing the desired image.
Packit Service df60bb
		CreateFromJpeg does not close the file.
Packit Service df60bb
		\return true for success, or false if unable to load the image (most often because the file is corrupt or does not contain a JPEG image).
Packit Service df60bb
		You can call Width() and Height() member functions of the image to determine its
Packit Service df60bb
		size. The returned image is always a truecolor image.
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateFromJpeg(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromJpegCtx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Load a truecolor image from a JPEG format file.
Packit Service df60bb
		Invoke CreateFromJpeg with an already opened
Packit Service df60bb
		pointer to a file containing the desired image.
Packit Service df60bb
		CreateFromJpeg does not close the file.
Packit Service df60bb
		\return true for success, or false if unable to load the image (most often because the file is corrupt or does not contain a JPEG image).
Packit Service df60bb
		You can call Width() and Height() member functions of the image to determine its
Packit Service df60bb
		size. The returned image is always a truecolor image.
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateFromJpeg(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromJpegPtr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Load a truecolor image from a JPEG format file.
Packit Service df60bb
		Invoke CreateFromJpeg with an image file in memory.
Packit Service df60bb
		\return true for success, or false if unable to load the image (most often because the format is corrupt or does not contain a JPEG image).
Packit Service df60bb
		You can call Width() and Height() member functions of the image to determine its
Packit Service df60bb
		size. The returned image is always a truecolor image.
Packit Service df60bb
	*/
Packit Service df60bb
	bool CreateFromJpeg(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromJpegCtx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	// Gd
Packit Service df60bb
	bool CreateFromGd(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGdCtx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGdPtr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromGdCtx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	// Gd2
Packit Service df60bb
	bool CreateFromGd2(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2(gdIOCtx * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2Ctx(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2(int size, void * data) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2Ptr(size, data)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2(std::istream & in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromGd2Ctx( & _in_ctx)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	// Gd2 Part
Packit Service df60bb
	bool CreateFromGd2Part(FILE * in, int srcx, int srcy, int w, int h) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2Part(in, srcx, srcy, w, h)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(gdIOCtx * in, int srcx, int srcy, int w, int h) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2PartCtx(in, srcx, srcy, w, h)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(int size, void * data, int srcx, int srcy, int w, int h) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromGd2PartPtr(size, data, srcx, srcy, w, h)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(std::istream & in, int srcx, int srcy, int w, int h) {
Packit Service df60bb
		clear();
Packit Service df60bb
		istreamIOCtx _in_ctx(in);
Packit Service df60bb
		return ((im = gdImageCreateFromGd2PartCtx( & _in_ctx, srcx, srcy, w, h)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(FILE * in, const Point & src, const Size & s) {
Packit Service df60bb
		return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(gdIOCtx * in, const Point & src, const Size & s) {
Packit Service df60bb
		return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(int size, void * data, const Point & src, const Size & s) {
Packit Service df60bb
		return CreateFromGd2Part(size, data, src.X(), src.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromGd2Part(std::istream & in, const Point & src, const Size & s) {
Packit Service df60bb
		return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	// Xbm
Packit Service df60bb
	bool CreateFromXbm(FILE * in) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromXbm(in)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	// Xpm
Packit Service df60bb
	bool CreateFromXpm(char * filename) {
Packit Service df60bb
		clear();
Packit Service df60bb
		return ((im = gdImageCreateFromXpm(filename)) != 0);
Packit Service df60bb
	}
Packit Service df60bb
	bool CreateFromXpm(std::string & filename) {
Packit Service df60bb
		return CreateFromXpm((char *)(filename.c_str()));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	// Accessors, Updaters & Methods:
Packit Service df60bb
	void SetPixel(int x, int y, int color) {
Packit Service df60bb
		gdImageSetPixel(im, x, y, color);
Packit Service df60bb
	}
Packit Service df60bb
	void SetPixel(const Point & p, int color) {
Packit Service df60bb
		SetPixel(p.X(), p.Y(), color);
Packit Service df60bb
	}
Packit Service df60bb
	int GetPixel(int x, int y) const {
Packit Service df60bb
		return gdImageGetPixel(im, x, y);
Packit Service df60bb
	}
Packit Service df60bb
	int GetPixel(const Point & p) const {
Packit Service df60bb
		return GetPixel(p.X(), p.Y());
Packit Service df60bb
	}
Packit Service df60bb
	int GetTrueColorPixel(int x, int y) const {
Packit Service df60bb
		return gdImageGetTrueColorPixel(im, x, y);
Packit Service df60bb
	}
Packit Service df60bb
	int GetTrueColorPixel(const Point & p) const {
Packit Service df60bb
		return GetTrueColorPixel(p.X(), p.Y());
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void SetPixel(int x, int y, TrueColor c) {
Packit Service df60bb
		SetPixel(x, y, c.Int());
Packit Service df60bb
	}
Packit Service df60bb
	void SetPixel(const Point & p, TrueColor c) {
Packit Service df60bb
		SetPixel(p.X(), p.Y(), c.Int());
Packit Service df60bb
	}
Packit Service df60bb
	void GetTrueColorPixel(TrueColor & c, int x, int y) const {
Packit Service df60bb
		c.set(GetTrueColorPixel(x, y));
Packit Service df60bb
	}
Packit Service df60bb
	void GetTrueColorPixel(TrueColor & c, const Point & p) const {
Packit Service df60bb
		c.set(GetTrueColorPixel(p.X(), p.Y()));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void AABlend() {
Packit Service df60bb
		gdImageAABlend(im);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Line(int x1, int y1, int x2, int y2, int color) {
Packit Service df60bb
		gdImageLine(im, x1, y1, x2, y2, color);
Packit Service df60bb
	}
Packit Service df60bb
	void Line(const Point & p1, const Point & p2, int color) {
Packit Service df60bb
		Line(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void Rectangle(int x1, int y1, int x2, int y2, int color) {
Packit Service df60bb
		gdImageRectangle(im, x1, y1, x2, y2, color);
Packit Service df60bb
	}
Packit Service df60bb
	void Rectangle(const Point & p1, const Point & p2, int color) {
Packit Service df60bb
		Rectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void Rectangle(const Point & p, const Size & s, int color) {
Packit Service df60bb
		Rectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledRectangle(int x1, int y1, int x2, int y2, int color) {
Packit Service df60bb
		gdImageFilledRectangle(im, x1, y1, x2, y2, color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledRectangle(const Point & p1, const Point & p2, int color) {
Packit Service df60bb
		FilledRectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledRectangle(const Point & p, const Size & s, int color) {
Packit Service df60bb
		FilledRectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void SetClip(int x1, int y1, int x2, int y2) {
Packit Service df60bb
		gdImageSetClip(im, x1, y1, x2, y2);
Packit Service df60bb
	}
Packit Service df60bb
	void SetClip(const Point & p1, const Point & p2) {
Packit Service df60bb
		SetClip(p1.X(), p1.Y(), p2.X(), p2.Y());
Packit Service df60bb
	}
Packit Service df60bb
	void SetClip(const Point & p, const Size & s) {
Packit Service df60bb
		SetClip(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H());
Packit Service df60bb
	}
Packit Service df60bb
	void GetClip(int & x1, int & y1, int & x2, int & y2) const {
Packit Service df60bb
		gdImageGetClip(im, & x1, & y1, & x2, & y2);
Packit Service df60bb
	}
Packit Service df60bb
	void GetClip(Point & p1, Point & p2) const {
Packit Service df60bb
		GetClip(p1.lhsX(), p1.lhsY(), p2.lhsX(), p2.lhsY());
Packit Service df60bb
	}
Packit Service df60bb
	void GetClip(Point & p, Size & s) const {
Packit Service df60bb
		Point p2;
Packit Service df60bb
		GetClip(p.lhsX(), p.lhsY(), p2.lhsX(), p2.lhsY());
Packit Service df60bb
		s.set(p2.X() - p.X(), p2.Y() - p.Y());
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	bool BoundsSafe(int x, int y) const {
Packit Service df60bb
		return (gdImageBoundsSafe(im, x, y)?true:false);
Packit Service df60bb
	}
Packit Service df60bb
	bool BoundsSafe(const Point & p) const {
Packit Service df60bb
		return BoundsSafe(p.X(), p.Y());
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Char(gdFontPtr f, int x, int y, int c, int color) {
Packit Service df60bb
		gdImageChar(im, f, x, y, c, color);
Packit Service df60bb
	}
Packit Service df60bb
	void CharUp(gdFontPtr f, int x, int y, int c, int color) {
Packit Service df60bb
		gdImageCharUp(im, f, x, y, c, color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Char(gdFontPtr f, const Point & p, int c, int color) {
Packit Service df60bb
		Char(f, p.X(), p.Y(), c, color);
Packit Service df60bb
	}
Packit Service df60bb
	void CharUp(gdFontPtr f, const Point & p, int c, int color) {
Packit Service df60bb
		CharUp(f, p.X(), p.Y(), c, color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void String(gdFontPtr f, int x, int y, unsigned char * s, int color) {
Packit Service df60bb
		gdImageString(im, f, x, y, (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, int x, int y, unsigned char * s, int color) {
Packit Service df60bb
		gdImageStringUp(im, f, x, y, (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, int x, int y, unsigned short * s, int color) {
Packit Service df60bb
		gdImageString16(im, f, x, y, (unsigned short *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, int x, int y, unsigned short * s, int color) {
Packit Service df60bb
		gdImageStringUp16(im, f, x, y, (unsigned short *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, int x, int y, char * s, int color) {
Packit Service df60bb
		gdImageString(im, f, x, y, (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, int x, int y, char * s, int color) {
Packit Service df60bb
		gdImageStringUp(im, f, x, y, (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, int x, int y, const std::string & s, int color) {
Packit Service df60bb
		String(f, x, y, (char *)s.c_str(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, int x, int y, const std::string & s, int color) {
Packit Service df60bb
		StringUp(f, x, y, (char *)s.c_str(), color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void String(gdFontPtr f, const Point & p, unsigned char * s, int color) {
Packit Service df60bb
		String(f, p.X(), p.Y(), (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, const Point & p, unsigned char * s, int color) {
Packit Service df60bb
		StringUp(f, p.X(), p.Y(), (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, const Point & p, unsigned short * s, int color) {
Packit Service df60bb
		String(f, p.X(), p.Y(), (unsigned short *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, const Point & p, unsigned short * s, int color) {
Packit Service df60bb
		StringUp(f, p.X(), p.Y(), (unsigned short *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, const Point & p, char * s, int color) {
Packit Service df60bb
		String(f, p.X(), p.Y(), (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, const Point & p, char * s, int color) {
Packit Service df60bb
		StringUp(f, p.X(), p.Y(), (unsigned char *)s, color);
Packit Service df60bb
	}
Packit Service df60bb
	void String(gdFontPtr f, const Point & p, const std::string & s, int color) {
Packit Service df60bb
		String(f, p, (char *)s.c_str(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void StringUp(gdFontPtr f, const Point & p, const std::string & s, int color) {
Packit Service df60bb
		StringUp(f, p, (char *)s.c_str(), color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                int x, int y, char * string) {
Packit Service df60bb
		return gdImageStringFT(im, brect, fg, fontlist, ptsize, angle, x, y, string);
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                int x, int y, char * string, gdFTStringExtraPtr strex) {
Packit Service df60bb
		return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, strex);
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                int x, int y, const std::string & string) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str());
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                int x, int y, const std::string & string, gdFTStringExtraPtr strex) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str(), strex);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                const Point & p, char * string) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string);
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                const Point & p, char * string, gdFTStringExtraPtr strex) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string, strex);
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                const Point & p, const std::string & string) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str());
Packit Service df60bb
	}
Packit Service df60bb
	char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
Packit Service df60bb
	                const Point & p, const std::string & string, gdFTStringExtraPtr strex) {
Packit Service df60bb
		return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str(), strex);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Polygon(gdPointPtr p, int n, int c) {
Packit Service df60bb
		gdImagePolygon(im, p, n, c);
Packit Service df60bb
	}
Packit Service df60bb
	void OpenPolygon(gdPointPtr p, int n, int c) {
Packit Service df60bb
		gdImageOpenPolygon(im, p, n, c);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledPolygon(gdPointPtr p, int n, int c) {
Packit Service df60bb
		gdImageFilledPolygon(im, p, n, c);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Polygon(PointPtr p, int n, int c) {
Packit Service df60bb
		Polygon(p->as_gdPointPtr(), n, c);
Packit Service df60bb
	}
Packit Service df60bb
	void OpenPolygon(PointPtr p, int n, int c) {
Packit Service df60bb
		OpenPolygon(p->as_gdPointPtr(), n, c);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledPolygon(PointPtr p, int n, int c) {
Packit Service df60bb
		FilledPolygon(p->as_gdPointPtr(), n, c);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	int ColorAllocate(int r, int g, int b) {
Packit Service df60bb
		return gdImageColorAllocate(im, r, g, b);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorAllocate(int r, int g, int b, int a) {
Packit Service df60bb
		return gdImageColorAllocateAlpha(im, r, g, b, a);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	int ColorClosest(int r, int g, int b) const {
Packit Service df60bb
		return gdImageColorClosest(im, r, g, b);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorClosest(int r, int g, int b, int a) const {
Packit Service df60bb
		return gdImageColorClosestAlpha(im, r, g, b, a);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorClosestHWB(int r, int g, int b) const {
Packit Service df60bb
		return gdImageColorClosestHWB(im, r, g, b);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorExact(int r, int g, int b) const {
Packit Service df60bb
		return gdImageColorExact(im, r, g, b);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorExact(int r, int g, int b, int a) const {
Packit Service df60bb
		return gdImageColorExactAlpha(im, r, g, b, a);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorResolve(int r, int g, int b) {
Packit Service df60bb
		return gdImageColorResolve(im, r, g, b);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorResolve(int r, int g, int b, int a) {
Packit Service df60bb
		return gdImageColorResolveAlpha(im, r, g, b, a);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void ColorDeallocate(int color) {
Packit Service df60bb
		gdImageColorDeallocate(im, color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void TrueColorToPalette(int ditherFlag, int colorsWanted) {
Packit Service df60bb
		gdImageTrueColorToPalette(im, ditherFlag, colorsWanted);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void ColorTransparent(int color) {
Packit Service df60bb
		gdImageColorTransparent(im, color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void PaletteCopy(gdImagePtr src) {
Packit Service df60bb
		gdImagePaletteCopy(im, src);
Packit Service df60bb
	}
Packit Service df60bb
	void PaletteCopy(const GD::Image & src) {
Packit Service df60bb
		PaletteCopy(src.im);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in GIF file format to \p out.
Packit Service df60bb
		\param out A FILE * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void Gif(FILE * out) const {
Packit Service df60bb
		gdImageGif(im, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in GIF file format to \p out.
Packit Service df60bb
		\param out A gdIOCtx * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void Gif(gdIOCtx * out) const {
Packit Service df60bb
		gdImageGifCtx(im, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Allocate sufficient memory, and write this image, in GIF file format, to that memory.
Packit Service df60bb
		\param size A pointer for the allocated memory
Packit Service df60bb
		\return A pointer to the allocated memory, containing the image GIF file formatted.  Caller is responsible for freeing with gdFree().
Packit Service df60bb
	*/
Packit Service df60bb
	void * Gif(int * size) const {
Packit Service df60bb
		return gdImageGifPtr(im, size);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in GIF file format to \p out.
Packit Service df60bb
		\param out An output stream, already opened.
Packit Service df60bb
	*/
Packit Service df60bb
	void Gif(std::ostream & out) const {
Packit Service df60bb
		ostreamIOCtx _out_ctx(out);
Packit Service df60bb
		gdImageGifCtx(im, & _out_ctx);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_LIBPNG
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out A FILE * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(FILE * out) const {
Packit Service df60bb
		gdImagePng(im, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out A gdIOCtx * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(gdIOCtx * out) const {
Packit Service df60bb
		gdImagePngCtx(im, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Allocate sufficient memory, and write this image, in PNG file format, to that memory.
Packit Service df60bb
		\param size A pointer for the allocated memory
Packit Service df60bb
		\return A pointer to the allocated memory, containing the image PNG file formatted.  Caller is responsible for freeing with gdFree().
Packit Service df60bb
	*/
Packit Service df60bb
	void * Png(int * size) const {
Packit Service df60bb
		return gdImagePngPtr(im, size);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out An output stream, already opened.
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(std::ostream & out) const {
Packit Service df60bb
		ostreamIOCtx _out_ctx(out);
Packit Service df60bb
		gdImagePngCtx(im, & _out_ctx);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out A FILE * handle
Packit Service df60bb
		\param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(FILE * out, int level) const {
Packit Service df60bb
		gdImagePngEx(im, out, level);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out A gdIOCtx * handle
Packit Service df60bb
		\param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(gdIOCtx * out, int level) const {
Packit Service df60bb
		gdImagePngCtxEx(im, out, level);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Allocate sufficient memory, and write this image, in PNG file format, to that memory.
Packit Service df60bb
		\param size A pointer for the allocated memory
Packit Service df60bb
		\param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
Packit Service df60bb
		\return A pointer to the allocated memory, containing the image PNG file formatted.  Caller is responsible for freeing with gdFree().
Packit Service df60bb
	*/
Packit Service df60bb
	void * Png(int * size, int level) const {
Packit Service df60bb
		return gdImagePngPtrEx(im, size, level);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in PNG file format to \p out.
Packit Service df60bb
		\param out An output stream, already opened.
Packit Service df60bb
		\param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
Packit Service df60bb
	*/
Packit Service df60bb
	void Png(std::ostream & out, int level) const {
Packit Service df60bb
		ostreamIOCtx _out_ctx(out);
Packit Service df60bb
		gdImagePngCtxEx(im, & _out_ctx, level);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in WBMP file format ( black and white only ) to \p out.
Packit Service df60bb
		\param fg The color index of the foreground. All other pixels considered background.
Packit Service df60bb
		\param out A FILE * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void WBMP(int fg, FILE * out) const {
Packit Service df60bb
		gdImageWBMP(im, fg, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in WBMP file format ( black and white only ) to \p out.
Packit Service df60bb
		\param fg The color index of the foreground. All other pixels considered background.
Packit Service df60bb
		\param out A gdIOCtx * handle
Packit Service df60bb
	*/
Packit Service df60bb
	void WBMP(int fg, gdIOCtx * out) const {
Packit Service df60bb
		gdImageWBMPCtx(im, fg, out);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Allocate sufficient memory, and write this image, in WBMP file format ( black and white only ), to that memory.
Packit Service df60bb
		\param size A pointer for the allocated memory
Packit Service df60bb
		\param fg The color index of the foreground. All other pixels considered background.
Packit Service df60bb
		\return A pointer to the allocated memory, containing the image WBMP file formatted.  Caller is responsible for freeing with gdFree().
Packit Service df60bb
	*/
Packit Service df60bb
	void * WBMP(int * size, int fg) const {
Packit Service df60bb
		return gdImageWBMPPtr(im, size, fg);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in WBMP file format ( black and white only ) to \p out.
Packit Service df60bb
		\param fg The color index of the foreground. All other pixels considered background.
Packit Service df60bb
		\param out An output stream, already opened.
Packit Service df60bb
	*/
Packit Service df60bb
	void WBMP(int fg, std::ostream & out) const {
Packit Service df60bb
		ostreamIOCtx _out_ctx(out);
Packit Service df60bb
		gdImageWBMPCtx(im, fg, & _out_ctx);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
#ifdef HAVE_LIBJPEG
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in JPEG file format to \p out.
Packit Service df60bb
		\param out A FILE * handle
Packit Service df60bb
		\param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size.  Default value is -1, indicating "use a sensible default value".
Packit Service df60bb
	*/
Packit Service df60bb
	void Jpeg(FILE * out, int quality = -1) const {
Packit Service df60bb
		gdImageJpeg(im, out, quality);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in JPEG file format to \p out.
Packit Service df60bb
		\param out A gdIOCtx * handle
Packit Service df60bb
		\param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size.  Default value is -1, indicating "use a sensible default value".
Packit Service df60bb
	*/
Packit Service df60bb
	void Jpeg(gdIOCtx * out, int quality = -1) const {
Packit Service df60bb
		gdImageJpegCtx(im, out, quality);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Allocate sufficient memory, and write this image, in JPEG file format, to that memory.
Packit Service df60bb
		\param size A pointer for the allocated memory
Packit Service df60bb
		\param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size.  Default value is -1, indicating "use a sensible default value".
Packit Service df60bb
		\return A pointer to the allocated memory, containing the image JPEG file formatted.  Caller is responsible for freeing with gdFree().
Packit Service df60bb
	*/
Packit Service df60bb
	void * Jpeg(int * size, int quality = -1) const {
Packit Service df60bb
		return gdImageJpegPtr(im, size, quality);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Write out this image in JPEG file format to \p out.
Packit Service df60bb
		\param out An output stream, already opened.
Packit Service df60bb
		\param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size.  Default value is -1, indicating "use a sensible default value".
Packit Service df60bb
	*/
Packit Service df60bb
	void Jpeg(std::ostream & out, int quality = -1) const {
Packit Service df60bb
		ostreamIOCtx _out_ctx(out);
Packit Service df60bb
		gdImageJpegCtx(im, & _out_ctx, quality);
Packit Service df60bb
	}
Packit Service df60bb
#endif
Packit Service df60bb
Packit Service df60bb
	void GifAnimBegin(FILE * out, int GlobalCM, int Loops) const {
Packit Service df60bb
		gdImageGifAnimBegin(im, out, GlobalCM, Loops);
Packit Service df60bb
	}
Packit Service df60bb
	void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
Packit Service df60bb
		gdImageGifAnimAdd(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
Packit Service df60bb
	}
Packit Service df60bb
	void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
Packit Service df60bb
		GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
Packit Service df60bb
	}
Packit Service df60bb
	inline static void GifAnimEnd(FILE * out) {
Packit Service df60bb
		gdImageGifAnimEnd(out);
Packit Service df60bb
	}
Packit Service df60bb
	void GifAnimBegin(gdIOCtx * out, int GlobalCM, int Loops) const {
Packit Service df60bb
		gdImageGifAnimBeginCtx(im, out, GlobalCM, Loops);
Packit Service df60bb
	}
Packit Service df60bb
	void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
Packit Service df60bb
		gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
Packit Service df60bb
	}
Packit Service df60bb
	void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
Packit Service df60bb
		GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
Packit Service df60bb
	}
Packit Service df60bb
	inline static void GifAnimEnd(gdIOCtx * out) {
Packit Service df60bb
		gdImageGifAnimEndCtx(out);
Packit Service df60bb
	}
Packit Service df60bb
	void * GifAnimBegin(int * size, int GlobalCM, int Loops) const {
Packit Service df60bb
		return gdImageGifAnimBeginPtr(im, size, GlobalCM, Loops);
Packit Service df60bb
	}
Packit Service df60bb
	void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
Packit Service df60bb
		return gdImageGifAnimAddPtr(im, size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
Packit Service df60bb
	}
Packit Service df60bb
	void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
Packit Service df60bb
		return GifAnimAdd(size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
Packit Service df60bb
	}
Packit Service df60bb
	inline static void * GifAnimEnd(int * size) {
Packit Service df60bb
		return gdImageGifAnimEndPtr(size);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Gd(FILE * out) const {
Packit Service df60bb
		gdImageGd(im, out);
Packit Service df60bb
	}
Packit Service df60bb
	void* Gd(int * size) const {
Packit Service df60bb
		return gdImageGdPtr(im, size);
Packit Service df60bb
	}
Packit Service df60bb
	void Gd2(FILE * out, int cs, int fmt) const {
Packit Service df60bb
		gdImageGd2(im, out, cs, fmt);
Packit Service df60bb
	}
Packit Service df60bb
	void* Gd2(int cs, int fmt, int * size) const {
Packit Service df60bb
		return gdImageGd2Ptr(im, cs, fmt, size);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Ellipse(int cx, int cy, int w, int h, int color) {
Packit Service df60bb
		gdImageEllipse(im, cx, cy, w, h, color);
Packit Service df60bb
	}
Packit Service df60bb
	/**
Packit Service df60bb
		Draw a partial ellipse centered at the given point, with the specified width and height in pixels.
Packit Service df60bb
	*/
Packit Service df60bb
	void FilledArc(int cx, int cy, int w, int h, int s, int e, int color, int style) {
Packit Service df60bb
		gdImageFilledArc(im, cx, cy, w, h, s, e, color, style);
Packit Service df60bb
	}
Packit Service df60bb
	void Arc(int cx, int cy, int w, int h, int s, int e, int color) {
Packit Service df60bb
		gdImageArc(im, cx, cy, w, h, s, e, color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledEllipse(int cx, int cy, int w, int h, int color) {
Packit Service df60bb
		gdImageFilledEllipse(im, cx, cy, w, h, color);
Packit Service df60bb
	}
Packit Service df60bb
	void FillToBorder(int x, int y, int border, int color) {
Packit Service df60bb
		gdImageFillToBorder(im, x, y, border, color);
Packit Service df60bb
	}
Packit Service df60bb
	void Fill(int x, int y, int color) {
Packit Service df60bb
		gdImageFill(im, x, y, color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Ellipse(const Point & c, const Size & s, int color) {
Packit Service df60bb
		Ellipse(c.X(), c.Y(), s.W(), s.H(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledArc(const Point & c, const Size & si, int s, int e, int color, int style) {
Packit Service df60bb
		FilledArc(c.X(), c.Y(), si.W(), si.H(), s, e, color, style);
Packit Service df60bb
	}
Packit Service df60bb
	void Arc(const Point & c, const Size & si, int s, int e, int color) {
Packit Service df60bb
		Arc(c.X(), c.Y(), si.W(), si.H(), s, e, color);
Packit Service df60bb
	}
Packit Service df60bb
	void FilledEllipse(const Point & c, const Size & s, int color) {
Packit Service df60bb
		FilledEllipse(c.X(), c.Y(), s.W(), s.H(), color);
Packit Service df60bb
	}
Packit Service df60bb
	void FillToBorder(const Point & p, int border, int color) {
Packit Service df60bb
		FillToBorder(p.X(), p.Y(), border, color);
Packit Service df60bb
	}
Packit Service df60bb
	void Fill(const Point & p, int color) {
Packit Service df60bb
		Fill(p.X(), p.Y(), color);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Copy(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h) {
Packit Service df60bb
		gdImageCopy(im, src, dstX, dstY, srcX, srcY, w, h);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMerge(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
Packit Service df60bb
		gdImageCopyMerge(im, src, dstX, dstY, srcX, srcY, w, h, pct);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMergeGray(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
Packit Service df60bb
		gdImageCopyMergeGray(im, src, dstX, dstY, srcX, srcY, w, h, pct);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void CopyResized(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
Packit Service df60bb
		gdImageCopyResized(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyResampled(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
Packit Service df60bb
		gdImageCopyResampled(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyRotated(const gdImagePtr src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle) {
Packit Service df60bb
		gdImageCopyRotated(im, src, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	Image * CopyGaussianBlurred(int radius, double sigma) {
Packit Service df60bb
		return new Image(gdImageCopyGaussianBlurred(im, radius, sigma));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Copy(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s) {
Packit Service df60bb
		Copy(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMerge(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
Packit Service df60bb
		CopyMerge(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMergeGray(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
Packit Service df60bb
		CopyMergeGray(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void CopyResized(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
Packit Service df60bb
		CopyResized(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyResampled(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
Packit Service df60bb
		CopyResampled(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyRotated(const gdImagePtr src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle) {
Packit Service df60bb
		CopyRotated(src, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Copy(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h) {
Packit Service df60bb
		Copy(src.im, dstX, dstY, srcX, srcY, w, h);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMerge(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
Packit Service df60bb
		CopyMerge(src.im, dstX, dstY, srcX, srcY, w, h, pct);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMergeGray(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
Packit Service df60bb
		CopyMergeGray(src.im, dstX, dstY, srcX, srcY, w, h, pct);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void CopyResized(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
Packit Service df60bb
		CopyResized(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyResampled(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
Packit Service df60bb
		CopyResampled(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyRotated(const GD::Image & src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle) {
Packit Service df60bb
		CopyRotated(src.im, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Copy(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s) {
Packit Service df60bb
		Copy(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMerge(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
Packit Service df60bb
		CopyMerge(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
Packit Service df60bb
	}
Packit Service df60bb
	void CopyMergeGray(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
Packit Service df60bb
		CopyMergeGray(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void CopyResized(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
Packit Service df60bb
		CopyResized(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyResampled(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
Packit Service df60bb
		CopyResampled(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
Packit Service df60bb
	}
Packit Service df60bb
	void CopyRotated(const GD::Image & src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle) {
Packit Service df60bb
		CopyRotated(src.im, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	Image * Clone() {
Packit Service df60bb
		return new Image(gdImageClone(im));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void SetBrush(gdImagePtr brush) {
Packit Service df60bb
		gdImageSetBrush(im, brush);
Packit Service df60bb
	}
Packit Service df60bb
	void SetBrush(const GD::Image & brush) {
Packit Service df60bb
		SetBrush(brush.im);
Packit Service df60bb
	}
Packit Service df60bb
	void SetTile(gdImagePtr tile) {
Packit Service df60bb
		gdImageSetTile(im, tile);
Packit Service df60bb
	}
Packit Service df60bb
	void SetTile(const GD::Image & tile) {
Packit Service df60bb
		SetTile(tile.im);
Packit Service df60bb
	}
Packit Service df60bb
	void SetAntiAliased(int c) {
Packit Service df60bb
		gdImageSetAntiAliased(im, c);
Packit Service df60bb
	}
Packit Service df60bb
	void SetAntiAliasedDontBlend(int c, int dont_blend) {
Packit Service df60bb
		gdImageSetAntiAliasedDontBlend(im, c, dont_blend);
Packit Service df60bb
	}
Packit Service df60bb
	void SetStyle(int * style, int noOfPixels) {
Packit Service df60bb
		gdImageSetStyle(im, style, noOfPixels);
Packit Service df60bb
	}
Packit Service df60bb
	void SetThickness(int thickness) {
Packit Service df60bb
		gdImageSetThickness(im, thickness);
Packit Service df60bb
	}
Packit Service df60bb
	void SetResolution(int res_x, int res_y) {
Packit Service df60bb
		gdImageSetResolution(im, res_x, res_y);
Packit Service df60bb
	}
Packit Service df60bb
	void SetInterpolationMethod(gdInterpolationMethod interpolation_method) {
Packit Service df60bb
		gdImageSetInterpolationMethod(im, interpolation_method);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	Image * RotateInterpolated(const float angle, int bgcolor) {
Packit Service df60bb
		return new Image(gdImageRotateInterpolated(im, angle, bgcolor));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	void Interlace(bool interlaceArg) {
Packit Service df60bb
		gdImageInterlace(im, interlaceArg?1:0);
Packit Service df60bb
	}
Packit Service df60bb
	void AlphaBlending(bool alphaBlendingArg) {
Packit Service df60bb
		gdImageAlphaBlending(im, alphaBlendingArg?1:0);
Packit Service df60bb
	}
Packit Service df60bb
	void SaveAlpha(bool saveAlphaArg) {
Packit Service df60bb
		gdImageSaveAlpha(im, saveAlphaArg?1:0);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	int ColorReplace(int src, int dst) {
Packit Service df60bb
		return gdImageColorReplace(im, src, dst);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorReplaceArray(int len, int * src, int * dst) {
Packit Service df60bb
		return gdImageColorReplaceArray(im, len, src, dst);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorReplaceCallback(gdCallbackImageColor callback) {
Packit Service df60bb
		return gdImageColorReplaceCallback(im, callback);
Packit Service df60bb
	}
Packit Service df60bb
	int ColorReplaceThreshold(int src, int dst, float threshold) {
Packit Service df60bb
		return gdImageColorReplaceThreshold(im, src, dst, threshold);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	bool Pixelate(int block_size, gdPixelateMode mode) {
Packit Service df60bb
		return gdImagePixelate(im, block_size, mode) == 0 ? false : true;
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	Image * Scale(int new_width, int new_height) {
Packit Service df60bb
		return new Image(gdImageScale(im, new_width, new_height));
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	bool IsTrueColor() const {
Packit Service df60bb
		return (gdImageTrueColor(im)?true:false);
Packit Service df60bb
	}
Packit Service df60bb
	int SX() const {
Packit Service df60bb
		return gdImageSX(im);
Packit Service df60bb
	}
Packit Service df60bb
	int SY() const {
Packit Service df60bb
		return gdImageSY(im);
Packit Service df60bb
	}
Packit Service df60bb
	int Width() const {
Packit Service df60bb
		return SX();
Packit Service df60bb
	}
Packit Service df60bb
	int Height() const {
Packit Service df60bb
		return SY();
Packit Service df60bb
	}
Packit Service df60bb
	int ResX() const {
Packit Service df60bb
		return gdImageResolutionX(im);
Packit Service df60bb
	}
Packit Service df60bb
	int ResY() const {
Packit Service df60bb
		return gdImageResolutionY(im);
Packit Service df60bb
	}
Packit Service df60bb
	void GetSize(Size & s) const {
Packit Service df60bb
		s.set(SX(), SY());
Packit Service df60bb
	}
Packit Service df60bb
	int ColorsTotal() const {
Packit Service df60bb
		return gdImageColorsTotal(im);
Packit Service df60bb
	}
Packit Service df60bb
	int Red(int color) const {
Packit Service df60bb
		return gdImageRed(im, color);
Packit Service df60bb
	}
Packit Service df60bb
	int Green(int color) const {
Packit Service df60bb
		return gdImageGreen(im, color);
Packit Service df60bb
	}
Packit Service df60bb
	int Blue(int color) const {
Packit Service df60bb
		return gdImageBlue(im, color);
Packit Service df60bb
	}
Packit Service df60bb
	int Alpha(int color) const {
Packit Service df60bb
		return gdImageAlpha(im, color);
Packit Service df60bb
	}
Packit Service df60bb
	int GetTransparent() const {
Packit Service df60bb
		return gdImageGetTransparent(im);
Packit Service df60bb
	}
Packit Service df60bb
	int GetInterlaced() const {
Packit Service df60bb
		return gdImageGetInterlaced(im);
Packit Service df60bb
	}
Packit Service df60bb
	int PalettePixel(int x, int y) const {
Packit Service df60bb
		return gdImagePalettePixel(im, x, y);
Packit Service df60bb
	}
Packit Service df60bb
	int TrueColorPixel(int x, int y) const {
Packit Service df60bb
		return gdImageTrueColorPixel(im, x, y);
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
	const gdImagePtr GetPtr() const {
Packit Service df60bb
		return im;
Packit Service df60bb
	}
Packit Service df60bb
Packit Service df60bb
protected:
Packit Service df60bb
	/// Free the internal image pointer
Packit Service df60bb
	void	clear() {
Packit Service df60bb
		if (im)
Packit Service df60bb
			gdImageDestroy(im);
Packit Service df60bb
		im = 0;
Packit Service df60bb
	}
Packit Service df60bb
	gdImagePtr im;
Packit Service df60bb
};
Packit Service df60bb
} // namespace GD
Packit Service df60bb
/// Read in an image from a standard library input stream
Packit Service df60bb
std::istream & operator>> (std::istream & in, GD::Image & img);
Packit Service df60bb
Packit Service df60bb
#endif /* _gdpp_h */
Packit Service df60bb
#endif /* __cplusplus */