/[H9]/trunk/tntnet/dynamic/gd-cpp/gdpp.h
ViewVC logotype

Annotation of /trunk/tntnet/dynamic/gd-cpp/gdpp.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 298 - (hide annotations) (download)
Mon Dec 17 19:14:37 2007 UTC (16 years, 5 months ago) by torben
File MIME type: text/plain
File size: 51536 byte(s)
Updated to latest version of the wrapper library

1 torben 298 /* *****************************************************************************
2     ** $Id: gdpp.h,v 1.2 2007/12/16 21:31:27 kshepherd Exp $
3     ** Initial file written and documented by:
4     ** Kevin Shepherd <kshepherd@php.net> December 2007
5     ** of Scarlet Line http://www.scarletline.com/
6     ** with contributions from Torben Nielsen.
7     *******************************************************************************/
8     /** \file gdpp.h
9     \brief Object Oriented C++ wrappers around libgd functionality.
10    
11     Example usage, convert png to gif:
12 torben 68 #include <fstream>
13     #include <gdpp.h>
14    
15     std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
16 torben 298 GD::Image im(in, GD::Png_tag());
17 torben 68 if (im.good())
18     {
19     std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
20     im.Gif(out);
21     }
22     */
23 torben 298 #ifdef __cplusplus
24     #ifndef _gdpp_h
25     #define _gdpp_h
26 torben 68
27 torben 298 #include "gd_io_stream.h"
28     #include <string>
29    
30     /// namespace GD:: contains the C++ wrapper classes for libgd
31     /** This namespace is primarily to avoid name clashes, and to
32     contain all of the gd classes within one namespace.
33     It is not recommended to use the "using namespace" directive with this namespace.
34     Example usage:
35     GD::Image im(64, 32, true); // Create a truecolor image 64 pixels wide by 32 pixels high
36     GD::Point pt(10, 8); // The point at x=10, y=8.
37     GD::Size sz(16, 8); // The size width=16, height=8.
38     GD::TrueColor col(0xFF, 0, 0); // The colour red; R=255, G=0, B=0.
39     im.Rectangle(pt, sz, col.Int()); // Draw a red rectangle with top left corner at pt, of size sz.
40     */
41 torben 68 namespace GD
42     {
43 torben 298 /** This class GD::Point stores a point in two dimensions, somewhere
44     on the plane of an image.
45     */
46 torben 68 class Point
47     {
48     public:
49     // Constructors
50     Point(int x, int y)
51     :_x(x), _y(y) {}
52     Point(const Point & p)
53     :_x(p._x), _y(p._y) {}
54     Point()
55     :_x(0), _y(0) {}
56     Point & operator=(const Point & p)
57     {
58     _x = p._x;
59     _y = p._y;
60     return (* this);
61     }
62     // Accessors
63     int X() const
64     { return _x; }
65     int Y() const
66     { return _y; }
67     // Updaters
68     void X(int x)
69     { _x = x; }
70     void Y(int y)
71     { _y = y; }
72     void set(int x, int y)
73     { _x = x; _y = y; }
74     int & lhsX()
75     { return _x; }
76     int & lhsY()
77     { return _y; }
78    
79     gdPointPtr as_gdPointPtr()
80     { return (gdPointPtr) this; }
81     protected:
82     int _x, _y;
83     };
84     typedef Point * PointPtr;
85 torben 298 /** This class GD::Size stores length in two dimensions.
86     Giving the size of an area as width and height.
87     */
88 torben 68 class Size
89     {
90     public:
91     // Constructors
92     Size(int w, int h)
93     :_w(w), _h(h) {}
94     Size(const Size & p)
95     :_w(p._w), _h(p._h) {}
96     Size()
97     :_w(0), _h(0) {}
98     Size & operator=(const Size & p)
99     {
100     _w = p._w;
101     _h = p._h;
102     return (* this);
103     }
104     // Accessors
105     int W() const
106     { return _w; }
107     int H() const
108     { return _h; }
109     // Updaters
110     void W(int w)
111     { _w = w; }
112     void H(int h)
113     { _h = h; }
114     void set(int w, int h)
115     { _w = w; _h = h; }
116     int & lhsW()
117     { return _w; }
118     int & lhsH()
119     { return _h; }
120     protected:
121     int _w, _h;
122     };
123     typedef Size * SizePtr;
124    
125 torben 298 /** This class GD::TrueColor stores a colour as an RGBA quadruplet.
126     It can also be read as an integer, and in other colour formats.
127     */
128 torben 68 class TrueColor
129     {
130     public:
131     union as_types
132     {
133     int as_int;
134     struct uchars
135     {
136     unsigned char blue, green, red, alpha;
137     } as_uchar;
138     };
139     TrueColor()
140     { internal.as_int = 0; }
141     TrueColor(int c)
142     { internal.as_int = c; }
143     TrueColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0)
144     {
145     internal.as_uchar.alpha = a;
146     internal.as_uchar.red = r;
147     internal.as_uchar.green = g;
148     internal.as_uchar.blue = b;
149     }
150     // Accessors
151     int Int() const
152     { return internal.as_int; }
153     unsigned char Red() const
154     { return internal.as_uchar.red; }
155     unsigned char Green() const
156     { return internal.as_uchar.green; }
157     unsigned char Blue() const
158     { return internal.as_uchar.blue; }
159     unsigned char Alpha() const
160     { return internal.as_uchar.alpha; }
161     // Updaters
162     void set(int c)
163     { internal.as_int = c; }
164     void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0)
165     {
166     internal.as_uchar.alpha = a;
167     internal.as_uchar.red = r;
168     internal.as_uchar.green = g;
169     internal.as_uchar.blue = b;
170     }
171     void Red(unsigned char c)
172     { internal.as_uchar.red = c; }
173     void Green(unsigned char c)
174     { internal.as_uchar.green = c; }
175     void Blue(unsigned char c)
176     { internal.as_uchar.blue = c; }
177     void Alpha(unsigned char c)
178     { internal.as_uchar.alpha = c; }
179     protected:
180     as_types internal;
181     };
182 torben 298 /* The following tags are simply empty structures which are used
183     to tell the compiler which constructor we want when we know
184     the image file format.
185     */
186     struct Png_tag {};
187     struct Gif_tag {};
188     struct WBMP_tag {};
189     struct Jpeg_tag {};
190     struct Gd_tag {};
191     struct Gd2_tag {};
192     struct Xbm_tag {};
193 torben 68
194 torben 298 /** This class GD::Image wraps all of the 'C' libgd functionality
195     for the convenience of C++ users. An instance of this class
196     corresponds to a single image.
197     */
198 torben 68 class BGD_EXPORT_DATA_IMPL Image
199     {
200     public:
201 torben 298 /** Construct a null image
202     */
203 torben 68 Image()
204     :im(0)
205     {}
206 torben 298 /** Construct a blank image, of the given size and colour format type.
207     \param[in] sx Width of the image
208     \param[in] sy Height of the image
209     \param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
210     */
211 torben 68 Image(int sx, int sy, bool istruecolor = false)
212     :im(0)
213     {
214     if (istruecolor)
215     CreateTrueColor(sx, sy);
216     else
217     Create(sx, sy);
218     }
219 torben 298 /** Construct a blank image, of the given size and colour format type.
220     \param[in] s Width and height of the image
221     \param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
222     */
223 torben 68 Image(const Size & s, bool istruecolor = false)
224     :im(0)
225     {
226     if (istruecolor)
227     CreateTrueColor(s);
228     else
229     Create(s);
230     }
231 torben 298 /** Construct an instance of the GD::Image class, given the internal gdImage poimter.
232     Note that gdImageDestroy will be called on the image pointer in the destructor.
233     \param[in] i Pointer to the internal gdImage
234     */
235 torben 68 Image(gdImagePtr i)
236     :im(i) {}
237 torben 298 /** Copy constructor. Construct an instance of the GD::Image class,
238     by making a copy of the GD::Image provided.
239     \param[in] i Reference to the image to be copied
240     */
241     Image(const GD::Image & i)
242     :im(0)
243     {
244     Copy(i);
245     }
246     /** Construct an image by reading from \p in. This constructor
247     will first attempt to determine the file format.
248     \param[in] in The stream containing the image data
249     */
250 torben 68 Image(std::istream & in)
251     :im(0) { CreateFrom(in); }
252 torben 298 /** Construct an image by reading from \p in. This constructor
253     will first attempt to determine the file format.
254     \param[in] in An opened FILE * handle to a file containing the image data
255     */
256 torben 68 Image(FILE * in)
257     :im(0) { CreateFrom(in); }
258 torben 298 /** Construct an image by reading from memory block \p data. This constructor
259     will first attempt to determine the image formatting.
260     \param[in] size The byte count of the memory block
261     \param[in] data Pointer to the memory block
262     */
263     Image(int size, void * data)
264     :im(0) { CreateFrom(size, data); }
265 torben 68
266 torben 298 /** Construct an image by reading from \p in.
267     The tag is an empty struct which simply tells the compiler which image read function to use.
268     e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
269     \param[in] in The stream containing the image data
270     */
271 torben 68 Image(std::istream & in, Png_tag)
272     :im(0) { CreateFromPng(in); }
273 torben 298 /** Construct an image by reading from \p in.
274     The tag is an empty struct which simply tells the compiler which image read function to use.
275     e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
276     \param[in] in An opened FILE * handle to a file containing the image data
277     */
278 torben 68 Image(FILE * in, Png_tag)
279     :im(0) { CreateFromPng(in); }
280 torben 298 /** Construct an image by reading from \p in.
281     The tag is an empty struct which simply tells the compiler which image read function to use.
282     e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
283     \param[in] in The io context from which to read the image data
284     */
285 torben 68 Image(gdIOCtx * in, Png_tag)
286     :im(0) { CreateFromPng(in); }
287 torben 298 /** Construct an image by reading from memory block \p data.
288     The tag is an empty struct which simply tells the compiler which image read function to use.
289     e.g. GD::Image img(sz, dat, GD::Png_tag()); // read a png file from dat
290     \param[in] size The byte count of the memory block
291     \param[in] data Pointer to the memory block
292     */
293 torben 68 Image(int size, void * data, Png_tag)
294     :im(0) { CreateFromPng(size, data); }
295    
296 torben 298 /** Construct an image by reading from \p in.
297     The tag is an empty struct which simply tells the compiler which image read function to use.
298     e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
299     \param[in] in The stream containing the image data
300     */
301 torben 68 Image(std::istream & in, Gif_tag)
302     :im(0) { CreateFromGif(in); }
303 torben 298 /** Construct an image by reading from \p in.
304     The tag is an empty struct which simply tells the compiler which image read function to use.
305     e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
306     \param[in] in An opened FILE * handle to a file containing the image data
307     */
308 torben 68 Image(FILE * in, Gif_tag)
309     :im(0) { CreateFromGif(in); }
310 torben 298 /** Construct an image by reading from \p in.
311     The tag is an empty struct which simply tells the compiler which image read function to use.
312     e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
313     \param[in] in The io context from which to read the image data
314     */
315 torben 68 Image(gdIOCtx * in, Gif_tag)
316     :im(0) { CreateFromGif(in); }
317 torben 298 /** Construct an image by reading from memory block \p data.
318     The tag is an empty struct which simply tells the compiler which image read function to use.
319     e.g. GD::Image img(sz, dat, GD::Gif_tag()); // read a gif file from dat
320     \param[in] size The byte count of the memory block
321     \param[in] data Pointer to the memory block
322     */
323 torben 68 Image(int size, void * data, Gif_tag)
324     :im(0) { CreateFromGif(size, data); }
325    
326 torben 298 /** Construct an image by reading from \p in.
327     The tag is an empty struct which simply tells the compiler which image read function to use.
328     e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
329     \param[in] in The stream containing the image data
330     */
331 torben 68 Image(std::istream & in, WBMP_tag)
332     :im(0) { CreateFromWBMP(in); }
333 torben 298 /** Construct an image by reading from \p in.
334     The tag is an empty struct which simply tells the compiler which image read function to use.
335     e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
336     \param[in] in An opened FILE * handle to a file containing the image data
337     */
338 torben 68 Image(FILE * in, WBMP_tag)
339     :im(0) { CreateFromWBMP(in); }
340 torben 298 /** Construct an image by reading from \p in.
341     The tag is an empty struct which simply tells the compiler which image read function to use.
342     e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
343     \param[in] in The io context from which to read the image data
344     */
345 torben 68 Image(gdIOCtx * in, WBMP_tag)
346     :im(0) { CreateFromWBMP(in); }
347 torben 298 /** Construct an image by reading from memory block \p data.
348     The tag is an empty struct which simply tells the compiler which image read function to use.
349     e.g. GD::Image img(sz, dat, GD::WBMP_tag()); // read a monchrome WBMP file from dat
350     \param[in] size The byte count of the memory block
351     \param[in] data Pointer to the memory block
352     */
353 torben 68 Image(int size, void * data, WBMP_tag)
354     :im(0) { CreateFromWBMP(size, data); }
355    
356 torben 298 /** Construct an image by reading from \p in.
357     The tag is an empty struct which simply tells the compiler which image read function to use.
358     e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
359     \param[in] in The stream containing the image data
360     */
361 torben 68 Image(std::istream & in, Jpeg_tag)
362     :im(0) { CreateFromJpeg(in); }
363 torben 298 /** Construct an image by reading from \p in.
364     The tag is an empty struct which simply tells the compiler which image read function to use.
365     e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
366     \param[in] in An opened FILE * handle to a file containing the image data
367     */
368 torben 68 Image(FILE * in, Jpeg_tag)
369     :im(0) { CreateFromJpeg(in); }
370 torben 298 /** Construct an image by reading from \p in.
371     The tag is an empty struct which simply tells the compiler which image read function to use.
372     e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
373     \param[in] in The io context from which to read the image data
374     */
375 torben 68 Image(gdIOCtx * in, Jpeg_tag)
376     :im(0) { CreateFromJpeg(in); }
377 torben 298 /** Construct an image by reading from memory block \p data.
378     The tag is an empty struct which simply tells the compiler which image read function to use.
379     e.g. GD::Image img(sz, dat, GD::Jpeg_tag()); // read a jpeg file from dat
380     \param[in] size The byte count of the memory block
381     \param[in] data Pointer to the memory block
382     */
383 torben 68 Image(int size, void * data, Jpeg_tag)
384     :im(0) { CreateFromJpeg(size, data); }
385    
386 torben 298 /** Construct an image by reading from \p in.
387     The tag is an empty struct which simply tells the compiler which image read function to use.
388     e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
389     \param[in] in The stream containing the image data
390     */
391 torben 68 Image(std::istream & in, Gd_tag)
392     :im(0) { CreateFromGd(in); }
393 torben 298 /** Construct an image by reading from \p in.
394     The tag is an empty struct which simply tells the compiler which image read function to use.
395     e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
396     \param[in] in An opened FILE * handle to a file containing the image data
397     */
398 torben 68 Image(FILE * in, Gd_tag)
399     :im(0) { CreateFromGd(in); }
400 torben 298 /** Construct an image by reading from \p in.
401     The tag is an empty struct which simply tells the compiler which image read function to use.
402     e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
403     \param[in] in The io context from which to read the image data
404     */
405 torben 68 Image(gdIOCtx * in, Gd_tag)
406     :im(0) { CreateFromGd(in); }
407 torben 298 /** Construct an image by reading from memory block \p data.
408     The tag is an empty struct which simply tells the compiler which image read function to use.
409     e.g. GD::Image img(sz, dat, GD::Gd_tag()); // read a gd file from dat
410     \param[in] size The byte count of the memory block
411     \param[in] data Pointer to the memory block
412     */
413 torben 68 Image(int size, void * data, Gd_tag)
414     :im(0) { CreateFromGd(size, data); }
415    
416 torben 298 /** Construct an image by reading from \p in.
417     The tag is an empty struct which simply tells the compiler which image read function to use.
418     e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
419     \param[in] in The stream containing the image data
420     */
421 torben 68 Image(std::istream & in, Gd2_tag)
422     :im(0) { CreateFromGd2(in); }
423 torben 298 /** Construct an image by reading from \p in.
424     The tag is an empty struct which simply tells the compiler which image read function to use.
425     e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
426     \param[in] in An opened FILE * handle to a file containing the image data
427     */
428 torben 68 Image(FILE * in, Gd2_tag)
429     :im(0) { CreateFromGd2(in); }
430 torben 298 /** Construct an image by reading from \p in.
431     The tag is an empty struct which simply tells the compiler which image read function to use.
432     e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
433     \param[in] in The io context from which to read the image data
434     */
435 torben 68 Image(gdIOCtx * in, Gd2_tag)
436     :im(0) { CreateFromGd2(in); }
437 torben 298 /** Construct an image by reading from memory block \p data.
438     The tag is an empty struct which simply tells the compiler which image read function to use.
439     e.g. GD::Image img(sz, dat, GD::Gd2_tag()); // read a gd2 file from dat
440     \param[in] size The byte count of the memory block
441     \param[in] data Pointer to the memory block
442     */
443 torben 68 Image(int size, void * data, Gd2_tag)
444     :im(0) { CreateFromGd2(size, data); }
445    
446 torben 298 /** Construct an image by reading from \p in.
447     The tag is an empty struct which simply tells the compiler which image read function to use.
448     e.g. GD::Image img(input, GD::Xbm_tag()); // read an xbm file from input
449     \param[in] in An opened FILE * handle to a file containing the image data
450     */
451 torben 68 Image(FILE * in, Xbm_tag)
452     :im(0) { CreateFromXbm(in); }
453    
454     ~Image()
455     { clear(); }
456 torben 298
457     /** Assignment Operator. Make this a copy of the GD::Image provided.
458     \param[in] src Reference to the image to be copied
459     */
460     GD::Image & operator=(const GD::Image & src)
461     {
462     Copy(src);
463     return (* this);
464     }
465     /** Make this an exact copy of the GD::Image provided. Any existing iamge data is discarded.
466     \param[in] src Reference to the image to be copied
467     */
468     void Copy(const GD::Image & src)
469     {
470     int w = src.Width(), h = src.Height();
471     if (src.IsTrueColor())
472     CreateTrueColor(w, h);
473     else
474     {
475     Create(w, h);
476     PaletteCopy(src);
477     }
478     Copy(src, 0, 0, 0, 0, w, h);
479     }
480     /** Check to see if this appears to be a valid image
481     */
482 torben 68 bool good() const
483     { return (im != 0); }
484     // Creation:
485 torben 298 /**
486     Create a palette-based image, with no more than 256 colors.
487     \param sx Width of the desired image
488     \param sy Height of the desired image
489     \return true if it worked, else false
490     */
491 torben 68 bool Create(int sx, int sy)
492     {
493     clear();
494     return ((im = gdImageCreate(sx, sy)) != 0);
495     }
496 torben 298 /**
497     Create a truecolor image.
498     \param sx Width of the desired image
499     \param sy Height of the desired image
500     \return true if it worked, else false
501     */
502 torben 68 bool CreateTrueColor(int sx, int sy)
503     {
504     clear();
505     return ((im = gdImageCreateTrueColor(sx, sy)) != 0);
506     }
507 torben 298 /**
508     Create a palette-based image, with no more than 256 colors.
509     \param s Width and height of the desired image
510     \return true if it worked, else false
511     */
512 torben 68 bool Create(const Size & s)
513     { return Create(s.W(), s.H()); }
514 torben 298 /**
515     Create a truecolor image.
516     \param s Width and height of the desired image
517     \return true if it worked, else false
518     */
519 torben 68 bool CreateTrueColor(const Size & s)
520     { return CreateTrueColor(s.W(), s.H()); }
521 torben 298 // Create, determining the image format from the data
522     /// Read an image from an open FILE * handle, after determining the image format
523 torben 68 bool CreateFrom(FILE * in);
524 torben 298 /// Read an image from an open standard library input stream, after determining the image format
525 torben 68 bool CreateFrom(std::istream & in);
526 torben 298 /// Read an image from a memory block, after determining the image format
527     bool CreateFrom(int size, void * data);
528 torben 68 // Png
529     bool CreateFromPng(FILE * in)
530     {
531     clear();
532     return ((im = gdImageCreateFromPng(in)) != 0);
533     }
534     bool CreateFromPng(gdIOCtx * in)
535     {
536     clear();
537     return ((im = gdImageCreateFromPngCtx(in)) != 0);
538     }
539     bool CreateFromPng(int size, void * data)
540     {
541     clear();
542     return ((im = gdImageCreateFromPngPtr(size, data)) != 0);
543     }
544     bool CreateFromPng(std::istream & in)
545     {
546     clear();
547     istreamIOCtx _in_ctx(in);
548     return ((im = gdImageCreateFromPngCtx( & _in_ctx)) != 0);
549     }
550     // Gif
551     bool CreateFromGif(FILE * in)
552     {
553     clear();
554     return ((im = gdImageCreateFromGif(in)) != 0);
555     }
556     bool CreateFromGif(gdIOCtx * in)
557     {
558     clear();
559     return ((im = gdImageCreateFromGifCtx(in)) != 0);
560     }
561     bool CreateFromGif(int size, void * data)
562     {
563     clear();
564     return ((im = gdImageCreateFromGifPtr(size, data)) != 0);
565     }
566     bool CreateFromGif(std::istream & in)
567     {
568     clear();
569     istreamIOCtx _in_ctx(in);
570     return ((im = gdImageCreateFromGifCtx( & _in_ctx)) != 0);
571     }
572     // WBMP
573     bool CreateFromWBMP(FILE * in)
574     {
575     clear();
576     return ((im = gdImageCreateFromWBMP(in)) != 0);
577     }
578     bool CreateFromWBMP(gdIOCtx * in)
579     {
580     clear();
581     return ((im = gdImageCreateFromWBMPCtx(in)) != 0);
582     }
583     bool CreateFromWBMP(int size, void * data)
584     {
585     clear();
586     return ((im = gdImageCreateFromWBMPPtr(size, data)) != 0);
587     }
588     bool CreateFromWBMP(std::istream & in)
589     {
590     clear();
591     istreamIOCtx _in_ctx(in);
592     return ((im = gdImageCreateFromWBMPCtx( & _in_ctx)) != 0);
593     }
594     // Jpeg
595 torben 298 /**
596     Load a truecolor image from a JPEG format file.
597     Invoke CreateFromJpeg with an already opened
598     pointer to a file containing the desired image.
599     CreateFromJpeg does not close the file.
600     \return true for success, or false if unable to load the image (most often because
601     the file is corrupt or does not contain a JPEG image).
602     You can call Width() and Height() member functions of the image to determine its
603     size. The returned image is always a truecolor image.
604     */
605 torben 68 bool CreateFromJpeg(FILE * in)
606     {
607     clear();
608     return ((im = gdImageCreateFromJpeg(in)) != 0);
609     }
610 torben 298 /**
611     Load a truecolor image from a JPEG format file.
612     Invoke CreateFromJpeg with an already opened
613     pointer to a file containing the desired image.
614     CreateFromJpeg does not close the file.
615     \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).
616     You can call Width() and Height() member functions of the image to determine its
617     size. The returned image is always a truecolor image.
618     */
619 torben 68 bool CreateFromJpeg(gdIOCtx * in)
620     {
621     clear();
622     return ((im = gdImageCreateFromJpegCtx(in)) != 0);
623     }
624 torben 298 /**
625     Load a truecolor image from a JPEG format file.
626     Invoke CreateFromJpeg with an already opened
627     pointer to a file containing the desired image.
628     CreateFromJpeg does not close the file.
629     \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).
630     You can call Width() and Height() member functions of the image to determine its
631     size. The returned image is always a truecolor image.
632     */
633 torben 68 bool CreateFromJpeg(int size, void * data)
634     {
635     clear();
636     return ((im = gdImageCreateFromJpegPtr(size, data)) != 0);
637     }
638 torben 298 /**
639     Load a truecolor image from a JPEG format file.
640     Invoke CreateFromJpeg with an image file in memory.
641     \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).
642     You can call Width() and Height() member functions of the image to determine its
643     size. The returned image is always a truecolor image.
644     */
645 torben 68 bool CreateFromJpeg(std::istream & in)
646     {
647     clear();
648     istreamIOCtx _in_ctx(in);
649     return ((im = gdImageCreateFromJpegCtx( & _in_ctx)) != 0);
650     }
651     // Gd
652     bool CreateFromGd(FILE * in)
653     {
654     clear();
655     return ((im = gdImageCreateFromGd(in)) != 0);
656     }
657     bool CreateFromGd(gdIOCtx * in)
658     {
659     clear();
660     return ((im = gdImageCreateFromGdCtx(in)) != 0);
661     }
662     bool CreateFromGd(int size, void * data)
663     {
664     clear();
665     return ((im = gdImageCreateFromGdPtr(size, data)) != 0);
666     }
667     bool CreateFromGd(std::istream & in)
668     {
669     clear();
670     istreamIOCtx _in_ctx(in);
671     return ((im = gdImageCreateFromGdCtx( & _in_ctx)) != 0);
672     }
673     // Gd2
674     bool CreateFromGd2(FILE * in)
675     {
676     clear();
677     return ((im = gdImageCreateFromGd2(in)) != 0);
678     }
679     bool CreateFromGd2(gdIOCtx * in)
680     {
681     clear();
682     return ((im = gdImageCreateFromGd2Ctx(in)) != 0);
683     }
684     bool CreateFromGd2(int size, void * data)
685     {
686     clear();
687     return ((im = gdImageCreateFromGd2Ptr(size, data)) != 0);
688     }
689     bool CreateFromGd2(std::istream & in)
690     {
691     clear();
692     istreamIOCtx _in_ctx(in);
693     return ((im = gdImageCreateFromGd2Ctx( & _in_ctx)) != 0);
694     }
695     // Gd2 Part
696     bool CreateFromGd2Part(FILE * in, int srcx, int srcy, int w, int h)
697     {
698     clear();
699     return ((im = gdImageCreateFromGd2Part(in, srcx, srcy, w, h)) != 0);
700     }
701     bool CreateFromGd2Part(gdIOCtx * in, int srcx, int srcy, int w, int h)
702     {
703     clear();
704     return ((im = gdImageCreateFromGd2PartCtx(in, srcx, srcy, w, h)) != 0);
705     }
706     bool CreateFromGd2Part(int size, void * data, int srcx, int srcy, int w, int h)
707     {
708     clear();
709     return ((im = gdImageCreateFromGd2PartPtr(size, data, srcx, srcy, w, h)) != 0);
710     }
711     bool CreateFromGd2Part(std::istream & in, int srcx, int srcy, int w, int h)
712     {
713     clear();
714     istreamIOCtx _in_ctx(in);
715     return ((im = gdImageCreateFromGd2PartCtx( & _in_ctx, srcx, srcy, w, h)) != 0);
716     }
717     bool CreateFromGd2Part(FILE * in, const Point & src, const Size & s)
718     { return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H()); }
719     bool CreateFromGd2Part(gdIOCtx * in, const Point & src, const Size & s)
720     { return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H()); }
721     bool CreateFromGd2Part(int size, void * data, const Point & src, const Size & s)
722     { return CreateFromGd2Part(size, data, src.X(), src.Y(), s.W(), s.H()); }
723     bool CreateFromGd2Part(std::istream & in, const Point & src, const Size & s)
724     { return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H()); }
725     // Xbm
726     bool CreateFromXbm(FILE * in)
727     {
728     clear();
729     return ((im = gdImageCreateFromXbm(in)) != 0);
730     }
731     // Xpm
732     bool CreateFromXpm(char * filename)
733     {
734     clear();
735     return ((im = gdImageCreateFromXpm(filename)) != 0);
736     }
737 torben 298 bool CreateFromXpm(std::string & filename)
738     { return CreateFromXpm((char *)(filename.c_str())); }
739 torben 68
740     // Accessors, Updaters & Methods:
741     void SetPixel(int x, int y, int color)
742     { gdImageSetPixel(im, x, y, color); }
743     void SetPixel(const Point & p, int color)
744     { SetPixel(p.X(), p.Y(), color); }
745     int GetPixel(int x, int y) const
746     { return gdImageGetPixel(im, x, y); }
747     int GetPixel(const Point & p) const
748     { return GetPixel(p.X(), p.Y()); }
749     int GetTrueColorPixel(int x, int y) const
750     { return gdImageGetTrueColorPixel(im, x, y); }
751     int GetTrueColorPixel(const Point & p) const
752     { return GetTrueColorPixel(p.X(), p.Y()); }
753    
754     void SetPixel(int x, int y, TrueColor c)
755     { SetPixel(x, y, c.Int()); }
756     void SetPixel(const Point & p, TrueColor c)
757     { SetPixel(p.X(), p.Y(), c.Int()); }
758     void GetTrueColorPixel(TrueColor & c, int x, int y) const
759     { c.set(GetTrueColorPixel(x, y)); }
760     void GetTrueColorPixel(TrueColor & c, const Point & p) const
761     { c.set(GetTrueColorPixel(p.X(), p.Y())); }
762    
763     void AABlend()
764     { gdImageAABlend(im); }
765    
766     void Line(int x1, int y1, int x2, int y2, int color)
767     { gdImageLine(im, x1, y1, x2, y2, color); }
768     void Line(const Point & p1, const Point & p2, int color)
769     { Line(p1.X(), p1.Y(), p2.X(), p2.Y(), color); }
770     void Rectangle(int x1, int y1, int x2, int y2, int color)
771     { gdImageRectangle(im, x1, y1, x2, y2, color); }
772     void Rectangle(const Point & p1, const Point & p2, int color)
773     { Rectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color); }
774     void Rectangle(const Point & p, const Size & s, int color)
775     { Rectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color); }
776     void FilledRectangle(int x1, int y1, int x2, int y2, int color)
777     { gdImageFilledRectangle(im, x1, y1, x2, y2, color); }
778     void FilledRectangle(const Point & p1, const Point & p2, int color)
779     { FilledRectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color); }
780     void FilledRectangle(const Point & p, const Size & s, int color)
781     { FilledRectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color); }
782    
783     void SetClip(int x1, int y1, int x2, int y2)
784     { gdImageSetClip(im, x1, y1, x2, y2); }
785     void SetClip(const Point & p1, const Point & p2)
786     { SetClip(p1.X(), p1.Y(), p2.X(), p2.Y()); }
787     void SetClip(const Point & p, const Size & s)
788     { SetClip(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H()); }
789     void GetClip(int & x1, int & y1, int & x2, int & y2) const
790     { gdImageGetClip(im, & x1, & y1, & x2, & y2); }
791     void GetClip(Point & p1, Point & p2) const
792     { GetClip(p1.lhsX(), p1.lhsY(), p2.lhsX(), p2.lhsY()); }
793     void GetClip(Point & p, Size & s) const
794     {
795     Point p2;
796     GetClip(p.lhsX(), p.lhsY(), p2.lhsX(), p2.lhsY());
797     s.set(p2.X() - p.X(), p2.Y() - p.Y());
798     }
799    
800     bool BoundsSafe(int x, int y) const
801     { return (gdImageBoundsSafe(im, x, y)?true:false); }
802     bool BoundsSafe(const Point & p) const
803     { return BoundsSafe(p.X(), p.Y()); }
804    
805     void Char(gdFontPtr f, int x, int y, int c, int color)
806     { gdImageChar(im, f, x, y, c, color); }
807     void CharUp(gdFontPtr f, int x, int y, int c, int color)
808     { gdImageCharUp(im, f, x, y, c, color); }
809    
810     void Char(gdFontPtr f, const Point & p, int c, int color)
811     { Char(f, p.X(), p.Y(), c, color); }
812     void CharUp(gdFontPtr f, const Point & p, int c, int color)
813     { CharUp(f, p.X(), p.Y(), c, color); }
814    
815     void String(gdFontPtr f, int x, int y, unsigned char * s, int color)
816     { gdImageString(im, f, x, y, (unsigned char *)s, color); }
817     void StringUp(gdFontPtr f, int x, int y, unsigned char * s, int color)
818     { gdImageStringUp(im, f, x, y, (unsigned char *)s, color); }
819     void String(gdFontPtr f, int x, int y, unsigned short * s, int color)
820     { gdImageString16(im, f, x, y, (unsigned short *)s, color); }
821     void StringUp(gdFontPtr f, int x, int y, unsigned short * s, int color)
822     { gdImageStringUp16(im, f, x, y, (unsigned short *)s, color); }
823     void String(gdFontPtr f, int x, int y, char * s, int color)
824     { gdImageString(im, f, x, y, (unsigned char *)s, color); }
825     void StringUp(gdFontPtr f, int x, int y, char * s, int color)
826     { gdImageStringUp(im, f, x, y, (unsigned char *)s, color); }
827     void String(gdFontPtr f, int x, int y, const std::string & s, int color)
828     { String(f, x, y, (char *)s.c_str(), color); }
829     void StringUp(gdFontPtr f, int x, int y, const std::string & s, int color)
830     { StringUp(f, x, y, (char *)s.c_str(), color); }
831    
832     void String(gdFontPtr f, const Point & p, unsigned char * s, int color)
833     { String(f, p.X(), p.Y(), (unsigned char *)s, color); }
834     void StringUp(gdFontPtr f, const Point & p, unsigned char * s, int color)
835     { StringUp(f, p.X(), p.Y(), (unsigned char *)s, color); }
836     void String(gdFontPtr f, const Point & p, unsigned short * s, int color)
837     { String(f, p.X(), p.Y(), (unsigned short *)s, color); }
838     void StringUp(gdFontPtr f, const Point & p, unsigned short * s, int color)
839     { StringUp(f, p.X(), p.Y(), (unsigned short *)s, color); }
840     void String(gdFontPtr f, const Point & p, char * s, int color)
841     { String(f, p.X(), p.Y(), (unsigned char *)s, color); }
842     void StringUp(gdFontPtr f, const Point & p, char * s, int color)
843     { StringUp(f, p.X(), p.Y(), (unsigned char *)s, color); }
844     void String(gdFontPtr f, const Point & p, const std::string & s, int color)
845     { String(f, p, (char *)s.c_str(), color); }
846     void StringUp(gdFontPtr f, const Point & p, const std::string & s, int color)
847     { StringUp(f, p, (char *)s.c_str(), color); }
848    
849     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
850     int x, int y, char * string)
851     { return gdImageStringFT(im, brect, fg, fontlist, ptsize, angle, x, y, string); }
852     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
853     int x, int y, char * string, gdFTStringExtraPtr strex)
854     { return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, strex); }
855     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
856     int x, int y, const std::string & string)
857     { return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str()); }
858     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
859     int x, int y, const std::string & string, gdFTStringExtraPtr strex)
860     { return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str(), strex); }
861    
862     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
863     const Point & p, char * string)
864     { return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string); }
865     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
866     const Point & p, char * string, gdFTStringExtraPtr strex)
867     { return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string, strex); }
868     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
869     const Point & p, const std::string & string)
870     { return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str()); }
871     char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
872     const Point & p, const std::string & string, gdFTStringExtraPtr strex)
873     { return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str(), strex); }
874    
875     void Polygon(gdPointPtr p, int n, int c)
876     { gdImagePolygon(im, p, n, c); }
877     void OpenPolygon(gdPointPtr p, int n, int c)
878     { gdImageOpenPolygon(im, p, n, c); }
879     void FilledPolygon(gdPointPtr p, int n, int c)
880     { gdImageFilledPolygon(im, p, n, c); }
881    
882     void Polygon(PointPtr p, int n, int c)
883     { Polygon(p->as_gdPointPtr(), n, c); }
884     void OpenPolygon(PointPtr p, int n, int c)
885     { OpenPolygon(p->as_gdPointPtr(), n, c); }
886     void FilledPolygon(PointPtr p, int n, int c)
887     { FilledPolygon(p->as_gdPointPtr(), n, c); }
888    
889     int ColorAllocate(int r, int g, int b)
890     { return gdImageColorAllocate(im, r, g, b); }
891     int ColorAllocate(int r, int g, int b, int a)
892     { return gdImageColorAllocateAlpha(im, r, g, b, a); }
893    
894     int ColorClosest(int r, int g, int b) const
895     { return gdImageColorClosest(im, r, g, b); }
896     int ColorClosest(int r, int g, int b, int a) const
897     { return gdImageColorClosestAlpha(im, r, g, b, a); }
898     int ColorClosestHWB(int r, int g, int b) const
899     { return gdImageColorClosestHWB(im, r, g, b); }
900     int ColorExact(int r, int g, int b) const
901     { return gdImageColorExact(im, r, g, b); }
902     int ColorExact(int r, int g, int b, int a) const
903     { return gdImageColorExactAlpha(im, r, g, b, a); }
904     int ColorResolve(int r, int g, int b)
905     { return gdImageColorResolve(im, r, g, b); }
906     int ColorResolve(int r, int g, int b, int a)
907     { return gdImageColorResolveAlpha(im, r, g, b, a); }
908    
909     void ColorDeallocate(int color)
910     { gdImageColorDeallocate(im, color); }
911    
912     void TrueColorToPalette(int ditherFlag, int colorsWanted)
913     { gdImageTrueColorToPalette(im, ditherFlag, colorsWanted); }
914    
915     void ColorTransparent(int color)
916     { gdImageColorTransparent(im, color); }
917    
918     void PaletteCopy(gdImagePtr src)
919     { gdImagePaletteCopy(im, src); }
920 torben 298 void PaletteCopy(const GD::Image & src)
921     { PaletteCopy(src.im); }
922 torben 68
923 torben 298 /**
924     Write out this image in GIF file format to \p out.
925     \param out A FILE * handle
926     */
927 torben 68 void Gif(FILE * out) const
928     { gdImageGif(im, out); }
929 torben 298 /**
930     Write out this image in GIF file format to \p out.
931     \param out A gdIOCtx * handle
932     */
933 torben 68 void Gif(gdIOCtx * out) const
934     { gdImageGifCtx(im, out); }
935 torben 298 /**
936     Allocate sufficient memory, and write this image, in GIF file format, to that memory.
937     \param size A pointer for the allocated memory
938     \return A pointer to the allocated memory, containing the image GIF file formatted. Caller is responsible for freeing with gdFree().
939     */
940 torben 68 void * Gif(int * size) const
941     { return gdImageGifPtr(im, size); }
942 torben 298 /**
943     Write out this image in GIF file format to \p out.
944     \param out An output stream, already opened.
945     */
946 torben 68 void Gif(std::ostream & out) const
947     {
948     ostreamIOCtx _out_ctx(out);
949     gdImageGifCtx(im, & _out_ctx);
950     }
951    
952 torben 298 /**
953     Write out this image in PNG file format to \p out.
954     \param out A FILE * handle
955     */
956 torben 68 void Png(FILE * out) const
957     { gdImagePng(im, out); }
958 torben 298 /**
959     Write out this image in PNG file format to \p out.
960     \param out A gdIOCtx * handle
961     */
962 torben 68 void Png(gdIOCtx * out) const
963     { gdImagePngCtx(im, out); }
964 torben 298 /**
965     Allocate sufficient memory, and write this image, in PNG file format, to that memory.
966     \param size A pointer for the allocated memory
967     \return A pointer to the allocated memory, containing the image PNG file formatted. Caller is responsible for freeing with gdFree().
968     */
969 torben 68 void * Png(int * size) const
970     { return gdImagePngPtr(im, size); }
971 torben 298 /**
972     Write out this image in PNG file format to \p out.
973     \param out An output stream, already opened.
974     */
975 torben 68 void Png(std::ostream & out) const
976     {
977     ostreamIOCtx _out_ctx(out);
978     gdImagePngCtx(im, & _out_ctx);
979     }
980 torben 298 /**
981     Write out this image in PNG file format to \p out.
982     \param out A FILE * handle
983     \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
984     */
985 torben 68 void Png(FILE * out, int level) const
986     { gdImagePngEx(im, out, level); }
987 torben 298 /**
988     Write out this image in PNG file format to \p out.
989     \param out A gdIOCtx * handle
990     \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
991     */
992 torben 68 void Png(gdIOCtx * out, int level) const
993     { gdImagePngCtxEx(im, out, level); }
994 torben 298 /**
995     Allocate sufficient memory, and write this image, in PNG file format, to that memory.
996     \param size A pointer for the allocated memory
997     \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
998     \return A pointer to the allocated memory, containing the image PNG file formatted. Caller is responsible for freeing with gdFree().
999     */
1000 torben 68 void * Png(int * size, int level) const
1001     { return gdImagePngPtrEx(im, size, level); }
1002 torben 298 /**
1003     Write out this image in PNG file format to \p out.
1004     \param out An output stream, already opened.
1005     \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
1006     */
1007 torben 68 void Png(std::ostream & out, int level) const
1008     {
1009     ostreamIOCtx _out_ctx(out);
1010     gdImagePngCtxEx(im, & _out_ctx, level);
1011     }
1012    
1013 torben 298 /**
1014     Write out this image in WBMP file format ( black and white only ) to \p out.
1015     \param fg The color index of the foreground. All other pixels considered background.
1016     \param out A FILE * handle
1017     */
1018 torben 68 void WBMP(int fg, FILE * out) const
1019     { gdImageWBMP(im, fg, out); }
1020 torben 298 /**
1021     Write out this image in WBMP file format ( black and white only ) to \p out.
1022     \param fg The color index of the foreground. All other pixels considered background.
1023     \param out A gdIOCtx * handle
1024     */
1025 torben 68 void WBMP(int fg, gdIOCtx * out) const
1026     { gdImageWBMPCtx(im, fg, out); }
1027 torben 298 /**
1028     Allocate sufficient memory, and write this image, in WBMP file format ( black and white only ), to that memory.
1029     \param size A pointer for the allocated memory
1030     \param fg The color index of the foreground. All other pixels considered background.
1031     \return A pointer to the allocated memory, containing the image WBMP file formatted. Caller is responsible for freeing with gdFree().
1032     */
1033 torben 68 void * WBMP(int * size, int fg) const
1034     { return gdImageWBMPPtr(im, size, fg); }
1035 torben 298 /**
1036     Write out this image in WBMP file format ( black and white only ) to \p out.
1037     \param fg The color index of the foreground. All other pixels considered background.
1038     \param out An output stream, already opened.
1039     */
1040 torben 68 void WBMP(int fg, std::ostream & out) const
1041     {
1042     ostreamIOCtx _out_ctx(out);
1043     gdImageWBMPCtx(im, fg, & _out_ctx);
1044     }
1045    
1046 torben 298 /**
1047     Write out this image in JPEG file format to \p out.
1048     \param out A FILE * handle
1049     \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".
1050     */
1051 torben 68 void Jpeg(FILE * out, int quality = -1) const
1052     { gdImageJpeg(im, out, quality); }
1053 torben 298 /**
1054     Write out this image in JPEG file format to \p out.
1055     \param out A gdIOCtx * handle
1056     \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".
1057     */
1058 torben 68 void Jpeg(gdIOCtx * out, int quality = -1) const
1059     { gdImageJpegCtx(im, out, quality); }
1060 torben 298 /**
1061     Allocate sufficient memory, and write this image, in JPEG file format, to that memory.
1062     \param size A pointer for the allocated memory
1063     \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".
1064     \return A pointer to the allocated memory, containing the image JPEG file formatted. Caller is responsible for freeing with gdFree().
1065     */
1066 torben 68 void * Jpeg(int * size, int quality = -1) const
1067     { return gdImageJpegPtr(im, size, quality); }
1068 torben 298 /**
1069     Write out this image in JPEG file format to \p out.
1070     \param out An output stream, already opened.
1071     \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".
1072     */
1073 torben 68 void Jpeg(std::ostream & out, int quality = -1) const
1074     {
1075     ostreamIOCtx _out_ctx(out);
1076     gdImageJpegCtx(im, & _out_ctx, quality);
1077     }
1078    
1079     void GifAnimBegin(FILE * out, int GlobalCM, int Loops) const
1080     { gdImageGifAnimBegin(im, out, GlobalCM, Loops); }
1081     void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const
1082     { gdImageGifAnimAdd(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm); }
1083 torben 298 void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const
1084     { GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im); }
1085 torben 68 inline static void GifAnimEnd(FILE * out)
1086     { gdImageGifAnimEnd(out); }
1087     void GifAnimBegin(gdIOCtx * out, int GlobalCM, int Loops) const
1088     { gdImageGifAnimBeginCtx(im, out, GlobalCM, Loops); }
1089     void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const
1090     { gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm); }
1091 torben 298 void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const
1092     { GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im); }
1093 torben 68 inline static void GifAnimEnd(gdIOCtx * out)
1094     { gdImageGifAnimEndCtx(out); }
1095     void * GifAnimBegin(int * size, int GlobalCM, int Loops) const
1096     { return gdImageGifAnimBeginPtr(im, size, GlobalCM, Loops); }
1097     void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const
1098     { return gdImageGifAnimAddPtr(im, size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm); }
1099 torben 298 void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const
1100     { return GifAnimAdd(size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im); }
1101 torben 68 inline static void * GifAnimEnd(int * size)
1102     { return gdImageGifAnimEndPtr(size); }
1103    
1104     void Gd(FILE * out) const
1105     { gdImageGd(im, out); }
1106     void Gd(int * size) const
1107     { gdImageGdPtr(im, size); }
1108     void Gd2(FILE * out, int cs, int fmt) const
1109     { gdImageGd2(im, out, cs, fmt); }
1110     void Gd2(int cs, int fmt, int * size) const
1111     { gdImageGd2Ptr(im, cs, fmt, size); }
1112    
1113     void Ellipse(int cx, int cy, int w, int h, int color)
1114     { gdImageEllipse(im, cx, cy, w, h, color); }
1115 torben 298 /**
1116     Draw a partial ellipse centered at the given point, with the specified width and height in pixels.
1117     */
1118 torben 68 void FilledArc(int cx, int cy, int w, int h, int s, int e, int color, int style)
1119     { gdImageFilledArc(im, cx, cy, w, h, s, e, color, style); }
1120     void Arc(int cx, int cy, int w, int h, int s, int e, int color)
1121     { gdImageArc(im, cx, cy, w, h, s, e, color); }
1122     void FilledEllipse(int cx, int cy, int w, int h, int color)
1123     { gdImageFilledEllipse(im, cx, cy, w, h, color); }
1124     void FillToBorder(int x, int y, int border, int color)
1125     { gdImageFillToBorder(im, x, y, border, color); }
1126     void Fill(int x, int y, int color)
1127     { gdImageFill(im, x, y, color); }
1128    
1129     void Ellipse(const Point & c, const Size & s, int color)
1130     { Ellipse(c.X(), c.Y(), s.W(), s.H(), color); }
1131     void FilledArc(const Point & c, const Size & si, int s, int e, int color, int style)
1132     { FilledArc(c.X(), c.Y(), si.W(), si.H(), s, e, color, style); }
1133     void Arc(const Point & c, const Size & si, int s, int e, int color)
1134     { Arc(c.X(), c.Y(), si.W(), si.H(), s, e, color); }
1135     void FilledEllipse(const Point & c, const Size & s, int color)
1136     { FilledEllipse(c.X(), c.Y(), s.W(), s.H(), color); }
1137     void FillToBorder(const Point & p, int border, int color)
1138     { FillToBorder(p.X(), p.Y(), border, color); }
1139     void Fill(const Point & p, int color)
1140     { Fill(p.X(), p.Y(), color); }
1141    
1142     void Copy(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h)
1143     { gdImageCopy(im, src, dstX, dstY, srcX, srcY, w, h); }
1144     void CopyMerge(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
1145     { gdImageCopyMerge(im, src, dstX, dstY, srcX, srcY, w, h, pct); }
1146     void CopyMergeGray(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
1147     { gdImageCopyMergeGray(im, src, dstX, dstY, srcX, srcY, w, h, pct); }
1148    
1149     void CopyResized(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
1150     { gdImageCopyResized(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); }
1151 torben 298 void CopyResampled(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
1152     { gdImageCopyResampled(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); }
1153 torben 68 void CopyRotated(const gdImagePtr src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle)
1154     { gdImageCopyRotated(im, src, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle); }
1155    
1156     void Copy(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s)
1157     { Copy(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H()); }
1158     void CopyMerge(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct)
1159     { CopyMerge(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct); }
1160     void CopyMergeGray(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct)
1161     { CopyMergeGray(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct); }
1162    
1163     void CopyResized(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS)
1164     { CopyResized(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H()); }
1165 torben 298 void CopyResampled(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS)
1166 torben 68 { CopyResampled(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H()); }
1167     void CopyRotated(const gdImagePtr src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle)
1168     { CopyRotated(src, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle); }
1169    
1170 torben 298 void Copy(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h)
1171     { Copy(src.im, dstX, dstY, srcX, srcY, w, h); }
1172     void CopyMerge(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
1173     { CopyMerge(src.im, dstX, dstY, srcX, srcY, w, h, pct); }
1174     void CopyMergeGray(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct)
1175     { CopyMergeGray(src.im, dstX, dstY, srcX, srcY, w, h, pct); }
1176    
1177     void CopyResized(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
1178     { CopyResized(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); }
1179     void CopyResampled(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
1180     { CopyResampled(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH); }
1181     void CopyRotated(const GD::Image & src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle)
1182     { CopyRotated(src.im, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle); }
1183    
1184     void Copy(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s)
1185     { Copy(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H()); }
1186     void CopyMerge(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct)
1187     { CopyMerge(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct); }
1188     void CopyMergeGray(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct)
1189     { CopyMergeGray(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct); }
1190    
1191     void CopyResized(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS)
1192     { CopyResized(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H()); }
1193     void CopyResampled(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS)
1194     { CopyResampled(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H()); }
1195     void CopyRotated(const GD::Image & src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle)
1196     { CopyRotated(src.im, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle); }
1197    
1198 torben 68 void SetBrush(gdImagePtr brush)
1199     { gdImageSetBrush(im, brush); }
1200 torben 298 void SetBrush(const GD::Image & brush)
1201     { SetBrush(brush.im); }
1202 torben 68 void SetTile(gdImagePtr tile)
1203     { gdImageSetTile(im, tile); }
1204 torben 298 void SetTile(const GD::Image & tile)
1205     { SetTile(tile.im); }
1206 torben 68 void SetAntiAliased(int c)
1207     { gdImageSetAntiAliased(im, c); }
1208     void SetAntiAliasedDontBlend(int c, int dont_blend)
1209     { gdImageSetAntiAliasedDontBlend(im, c, dont_blend); }
1210     void SetStyle(int * style, int noOfPixels)
1211     { gdImageSetStyle(im, style, noOfPixels); }
1212     void SetThickness(int thickness)
1213     { gdImageSetThickness(im, thickness); }
1214    
1215     void Interlace(bool interlaceArg)
1216     { gdImageInterlace(im, interlaceArg?1:0); }
1217     void AlphaBlending(bool alphaBlendingArg)
1218     { gdImageAlphaBlending(im, alphaBlendingArg?1:0); }
1219     void SaveAlpha(bool saveAlphaArg)
1220     { gdImageSaveAlpha(im, saveAlphaArg?1:0); }
1221    
1222     bool IsTrueColor() const
1223     { return (gdImageTrueColor(im)?true:false); }
1224     int SX() const
1225     { return gdImageSX(im); }
1226     int SY() const
1227     { return gdImageSY(im); }
1228     int Width() const
1229     { return SX(); }
1230     int Height() const
1231     { return SY(); }
1232     void GetSize(Size & s) const
1233     { s.set(SX(), SY()); }
1234     int ColorsTotal() const
1235     { return gdImageColorsTotal(im); }
1236     int Red(int color) const
1237     { return gdImageRed(im, color); }
1238     int Green(int color) const
1239     { return gdImageGreen(im, color); }
1240     int Blue(int color) const
1241     { return gdImageBlue(im, color); }
1242     int Alpha(int color) const
1243     { return gdImageAlpha(im, color); }
1244     int GetTransparent() const
1245     { return gdImageGetTransparent(im); }
1246     int GetInterlaced() const
1247     { return gdImageGetInterlaced(im); }
1248     int PalettePixel(int x, int y) const
1249     { return gdImagePalettePixel(im, x, y); }
1250     int TrueColorPixel(int x, int y) const
1251     { return gdImageTrueColorPixel(im, x, y); }
1252    
1253 torben 298 const gdImagePtr GetPtr() const
1254     { return im; }
1255 torben 68
1256     protected:
1257 torben 298 /// Free the internal image pointer
1258 torben 68 void clear()
1259     {
1260     if (im)
1261     gdImageDestroy(im);
1262     im = 0;
1263     }
1264     gdImagePtr im;
1265     };
1266     } // namespace GD
1267 torben 298 /// Read in an image from a standard library input stream
1268 torben 68 std::istream & operator>> (std::istream & in, GD::Image & img);
1269    
1270 torben 298 #endif /* _gdpp_h */
1271 torben 68 #endif /* __cplusplus */

  ViewVC Help
Powered by ViewVC 1.1.20