include wx/arrstr.h as it's needed by wxImageHandler and may not be implicitly includ...
[wxWidgets.git] / include / wx / image.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/image.h
3 // Purpose: wxImage class
4 // Author: Robert Roebling
5 // RCS-ID: $Id$
6 // Copyright: (c) Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_IMAGE_H_
11 #define _WX_IMAGE_H_
12
13 #include "wx/defs.h"
14
15 #if wxUSE_IMAGE
16
17 #include "wx/object.h"
18 #include "wx/string.h"
19 #include "wx/gdicmn.h"
20 #include "wx/hashmap.h"
21 #include "wx/arrstr.h"
22
23 #if wxUSE_STREAMS
24 # include "wx/stream.h"
25 #endif
26
27 // on some systems (Unixware 7.x) index is defined as a macro in the headers
28 // which breaks the compilation below
29 #undef index
30
31 #define wxIMAGE_OPTION_QUALITY wxString(_T("quality"))
32 #define wxIMAGE_OPTION_FILENAME wxString(_T("FileName"))
33
34 #define wxIMAGE_OPTION_RESOLUTION wxString(_T("Resolution"))
35 #define wxIMAGE_OPTION_RESOLUTIONX wxString(_T("ResolutionX"))
36 #define wxIMAGE_OPTION_RESOLUTIONY wxString(_T("ResolutionY"))
37
38 #define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(_T("ResolutionUnit"))
39
40 #define wxIMAGE_OPTION_MAX_WIDTH wxString(_T("MaxWidth"))
41 #define wxIMAGE_OPTION_MAX_HEIGHT wxString(_T("MaxHeight"))
42
43 // constants used with wxIMAGE_OPTION_RESOLUTIONUNIT
44 //
45 // NB: don't change these values, they correspond to libjpeg constants
46 enum wxImageResolution
47 {
48 // Resolution not specified
49 wxIMAGE_RESOLUTION_NONE = 0,
50
51 // Resolution specified in inches
52 wxIMAGE_RESOLUTION_INCHES = 1,
53
54 // Resolution specified in centimeters
55 wxIMAGE_RESOLUTION_CM = 2
56 };
57
58 // Constants for wxImage::Scale() for determining the level of quality
59 enum
60 {
61 wxIMAGE_QUALITY_NORMAL = 0,
62 wxIMAGE_QUALITY_HIGH = 1
63 };
64
65 // alpha channel values: fully transparent, default threshold separating
66 // transparent pixels from opaque for a few functions dealing with alpha and
67 // fully opaque
68 const unsigned char wxIMAGE_ALPHA_TRANSPARENT = 0;
69 const unsigned char wxIMAGE_ALPHA_THRESHOLD = 0x80;
70 const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff;
71
72 //-----------------------------------------------------------------------------
73 // classes
74 //-----------------------------------------------------------------------------
75
76 class WXDLLIMPEXP_FWD_CORE wxImageHandler;
77 class WXDLLIMPEXP_FWD_CORE wxImage;
78 class WXDLLIMPEXP_FWD_CORE wxPalette;
79
80 //-----------------------------------------------------------------------------
81 // wxVariant support
82 //-----------------------------------------------------------------------------
83
84 #if wxUSE_VARIANT
85 #include "wx/variant.h"
86 DECLARE_VARIANT_OBJECT_EXPORTED(wxImage,WXDLLIMPEXP_CORE)
87 #endif
88
89 //-----------------------------------------------------------------------------
90 // wxImageHandler
91 //-----------------------------------------------------------------------------
92
93 class WXDLLIMPEXP_CORE wxImageHandler: public wxObject
94 {
95 public:
96 wxImageHandler()
97 : m_name(wxEmptyString), m_extension(wxEmptyString), m_mime(), m_type(wxBITMAP_TYPE_INVALID)
98 { }
99
100 #if wxUSE_STREAMS
101 // NOTE: LoadFile and SaveFile are not pure virtuals to allow derived classes
102 // to implement only one of the two
103 virtual bool LoadFile( wxImage *WXUNUSED(image), wxInputStream& WXUNUSED(stream),
104 bool WXUNUSED(verbose)=true, int WXUNUSED(index)=-1 )
105 { return false; }
106 virtual bool SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSED(stream),
107 bool WXUNUSED(verbose)=true )
108 { return false; }
109
110 int GetImageCount( wxInputStream& stream );
111 // save the stream position, call DoGetImageCount() and restore the position
112
113 bool CanRead( wxInputStream& stream ) { return CallDoCanRead(stream); }
114 bool CanRead( const wxString& name );
115 #endif // wxUSE_STREAMS
116
117 void SetName(const wxString& name) { m_name = name; }
118 void SetExtension(const wxString& ext) { m_extension = ext; }
119 void SetAltExtensions(const wxArrayString& exts) { m_altExtensions = exts; }
120 void SetType(wxBitmapType type) { m_type = type; }
121 void SetMimeType(const wxString& type) { m_mime = type; }
122 const wxString& GetName() const { return m_name; }
123 const wxString& GetExtension() const { return m_extension; }
124 const wxArrayString& GetAltExtensions() const { return m_altExtensions; }
125 wxBitmapType GetType() const { return m_type; }
126 const wxString& GetMimeType() const { return m_mime; }
127
128 #if WXWIN_COMPATIBILITY_2_8
129 wxDEPRECATED(
130 void SetType(long type) { SetType((wxBitmapType)type); }
131 )
132 #endif // WXWIN_COMPATIBILITY_2_8
133
134 protected:
135 #if wxUSE_STREAMS
136 // NOTE: this function is allowed to change the current stream position
137 // since GetImageCount() will take care of restoring it later
138 virtual int DoGetImageCount( wxInputStream& WXUNUSED(stream) )
139 { return 1; } // default return value is 1 image
140
141 // NOTE: this function is allowed to change the current stream position
142 // since CallDoCanRead() will take care of restoring it later
143 virtual bool DoCanRead( wxInputStream& stream ) = 0;
144
145 // save the stream position, call DoCanRead() and restore the position
146 bool CallDoCanRead(wxInputStream& stream);
147 #endif // wxUSE_STREAMS
148
149 // helper for the derived classes SaveFile() implementations: returns the
150 // values of x- and y-resolution options specified as the image options if
151 // any
152 static wxImageResolution
153 GetResolutionFromOptions(const wxImage& image, int *x, int *y);
154
155
156 wxString m_name;
157 wxString m_extension;
158 wxArrayString m_altExtensions;
159 wxString m_mime;
160 wxBitmapType m_type;
161
162 private:
163 DECLARE_CLASS(wxImageHandler)
164 };
165
166 //-----------------------------------------------------------------------------
167 // wxImageHistogram
168 //-----------------------------------------------------------------------------
169
170 class WXDLLIMPEXP_CORE wxImageHistogramEntry
171 {
172 public:
173 wxImageHistogramEntry() { index = value = 0; }
174 unsigned long index;
175 unsigned long value;
176 };
177
178 WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry,
179 wxIntegerHash, wxIntegerEqual,
180 wxImageHistogramBase);
181
182 class WXDLLIMPEXP_CORE wxImageHistogram : public wxImageHistogramBase
183 {
184 public:
185 wxImageHistogram() : wxImageHistogramBase(256) { }
186
187 // get the key in the histogram for the given RGB values
188 static unsigned long MakeKey(unsigned char r,
189 unsigned char g,
190 unsigned char b)
191 {
192 return (r << 16) | (g << 8) | b;
193 }
194
195 // find first colour that is not used in the image and has higher
196 // RGB values than RGB(startR, startG, startB)
197 //
198 // returns true and puts this colour in r, g, b (each of which may be NULL)
199 // on success or returns false if there are no more free colours
200 bool FindFirstUnusedColour(unsigned char *r,
201 unsigned char *g,
202 unsigned char *b,
203 unsigned char startR = 1,
204 unsigned char startG = 0,
205 unsigned char startB = 0 ) const;
206 };
207
208 //-----------------------------------------------------------------------------
209 // wxImage
210 //-----------------------------------------------------------------------------
211
212 class WXDLLIMPEXP_CORE wxImage: public wxObject
213 {
214 public:
215 // red, green and blue are 8 bit unsigned integers in the range of 0..255
216 // We use the identifier RGBValue instead of RGB, since RGB is #defined
217 class RGBValue
218 {
219 public:
220 RGBValue(unsigned char r=0, unsigned char g=0, unsigned char b=0)
221 : red(r), green(g), blue(b) {}
222 unsigned char red;
223 unsigned char green;
224 unsigned char blue;
225 };
226
227 // hue, saturation and value are doubles in the range 0.0..1.0
228 class HSVValue
229 {
230 public:
231 HSVValue(double h=0.0, double s=0.0, double v=0.0)
232 : hue(h), saturation(s), value(v) {}
233 double hue;
234 double saturation;
235 double value;
236 };
237
238 wxImage() {}
239 wxImage( int width, int height, bool clear = true )
240 { Create( width, height, clear ); }
241 wxImage( int width, int height, unsigned char* data, bool static_data = false )
242 { Create( width, height, data, static_data ); }
243 wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false )
244 { Create( width, height, data, alpha, static_data ); }
245
246 // ctor variants using wxSize:
247 wxImage( const wxSize& sz, bool clear = true )
248 { Create( sz, clear ); }
249 wxImage( const wxSize& sz, unsigned char* data, bool static_data = false )
250 { Create( sz, data, static_data ); }
251 wxImage( const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false )
252 { Create( sz, data, alpha, static_data ); }
253
254 wxImage( const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 )
255 { LoadFile( name, type, index ); }
256 wxImage( const wxString& name, const wxString& mimetype, int index = -1 )
257 { LoadFile( name, mimetype, index ); }
258 wxImage( const char* const* xpmData )
259 { Create(xpmData); }
260
261 #if wxUSE_STREAMS
262 wxImage( wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 )
263 { LoadFile( stream, type, index ); }
264 wxImage( wxInputStream& stream, const wxString& mimetype, int index = -1 )
265 { LoadFile( stream, mimetype, index ); }
266 #endif // wxUSE_STREAMS
267
268 bool Create( const char* const* xpmData );
269 #ifdef __BORLANDC__
270 // needed for Borland 5.5
271 wxImage( char** xpmData ) { Create(const_cast<const char* const*>(xpmData)); }
272 bool Create( char** xpmData ) { return Create(const_cast<const char* const*>(xpmData)); }
273 #endif
274
275 bool Create( int width, int height, bool clear = true );
276 bool Create( int width, int height, unsigned char* data, bool static_data = false );
277 bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false );
278
279 // Create() variants using wxSize:
280 bool Create( const wxSize& sz, bool clear = true )
281 { return Create(sz.GetWidth(), sz.GetHeight(), clear); }
282 bool Create( const wxSize& sz, unsigned char* data, bool static_data = false )
283 { return Create(sz.GetWidth(), sz.GetHeight(), data, static_data); }
284 bool Create( const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false )
285 { return Create(sz.GetWidth(), sz.GetHeight(), data, alpha, static_data); }
286
287 void Destroy();
288
289 // initialize the image data with zeroes
290 void Clear(unsigned char value = 0);
291
292 // creates an identical copy of the image (the = operator
293 // just raises the ref count)
294 wxImage Copy() const;
295
296 // return the new image with size width*height
297 wxImage GetSubImage( const wxRect& rect) const;
298
299 // Paste the image or part of this image into an image of the given size at the pos
300 // any newly exposed areas will be filled with the rgb colour
301 // by default if r = g = b = -1 then fill with this image's mask colour or find and
302 // set a suitable mask colour
303 wxImage Size( const wxSize& size, const wxPoint& pos,
304 int r = -1, int g = -1, int b = -1 ) const;
305
306 // pastes image into this instance and takes care of
307 // the mask colour and out of bounds problems
308 void Paste( const wxImage &image, int x, int y );
309
310 // return the new image with size width*height
311 wxImage Scale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) const;
312
313 // box averager and bicubic filters for up/down sampling
314 wxImage ResampleBox(int width, int height) const;
315 wxImage ResampleBicubic(int width, int height) const;
316
317 // blur the image according to the specified pixel radius
318 wxImage Blur(int radius) const;
319 wxImage BlurHorizontal(int radius) const;
320 wxImage BlurVertical(int radius) const;
321
322 wxImage ShrinkBy( int xFactor , int yFactor ) const ;
323
324 // rescales the image in place
325 wxImage& Rescale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) { return *this = Scale(width, height, quality); }
326
327 // resizes the image in place
328 wxImage& Resize( const wxSize& size, const wxPoint& pos,
329 int r = -1, int g = -1, int b = -1 ) { return *this = Size(size, pos, r, g, b); }
330
331 // Rotates the image about the given point, 'angle' radians.
332 // Returns the rotated image, leaving this image intact.
333 wxImage Rotate(double angle, const wxPoint & centre_of_rotation,
334 bool interpolating = true, wxPoint * offset_after_rotation = NULL) const;
335
336 wxImage Rotate90( bool clockwise = true ) const;
337 wxImage Mirror( bool horizontally = true ) const;
338
339 // replace one colour with another
340 void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
341 unsigned char r2, unsigned char g2, unsigned char b2 );
342
343 // Convert to greyscale image. Uses the luminance component (Y) of the image.
344 // The luma value (YUV) is calculated using (R * lr) + (G * lg) + (B * lb), defaults to ITU-T BT.601
345 wxImage ConvertToGreyscale( double lr = 0.299, double lg = 0.587, double lb = 0.114 ) const;
346
347 // convert to monochrome image (<r,g,b> will be replaced by white,
348 // everything else by black)
349 wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const;
350
351 // these routines are slow but safe
352 void SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b );
353 void SetRGB( const wxRect& rect, unsigned char r, unsigned char g, unsigned char b );
354 unsigned char GetRed( int x, int y ) const;
355 unsigned char GetGreen( int x, int y ) const;
356 unsigned char GetBlue( int x, int y ) const;
357
358 void SetAlpha(int x, int y, unsigned char alpha);
359 unsigned char GetAlpha(int x, int y) const;
360
361 // find first colour that is not used in the image and has higher
362 // RGB values than <startR,startG,startB>
363 bool FindFirstUnusedColour( unsigned char *r, unsigned char *g, unsigned char *b,
364 unsigned char startR = 1, unsigned char startG = 0,
365 unsigned char startB = 0 ) const;
366 // Set image's mask to the area of 'mask' that has <r,g,b> colour
367 bool SetMaskFromImage(const wxImage & mask,
368 unsigned char mr, unsigned char mg, unsigned char mb);
369
370 // converts image's alpha channel to mask (choosing mask colour
371 // automatically or using the specified colour for the mask), if it has
372 // any, does nothing otherwise:
373 bool ConvertAlphaToMask(unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
374 void ConvertAlphaToMask(unsigned char mr, unsigned char mg, unsigned char mb,
375 unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
376
377
378 // This method converts an image where the original alpha
379 // information is only available as a shades of a colour
380 // (actually shades of grey) typically when you draw anti-
381 // aliased text into a bitmap. The DC drawinf routines
382 // draw grey values on the black background although they
383 // actually mean to draw white with differnt alpha values.
384 // This method reverses it, assuming a black (!) background
385 // and white text (actually only the red channel is read).
386 // The method will then fill up the whole image with the
387 // colour given.
388 bool ConvertColourToAlpha( unsigned char r, unsigned char g, unsigned char b );
389
390 static bool CanRead( const wxString& name );
391 static int GetImageCount( const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY );
392 virtual bool LoadFile( const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 );
393 virtual bool LoadFile( const wxString& name, const wxString& mimetype, int index = -1 );
394
395 #if wxUSE_STREAMS
396 static bool CanRead( wxInputStream& stream );
397 static int GetImageCount( wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY );
398 virtual bool LoadFile( wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 );
399 virtual bool LoadFile( wxInputStream& stream, const wxString& mimetype, int index = -1 );
400 #endif
401
402 virtual bool SaveFile( const wxString& name ) const;
403 virtual bool SaveFile( const wxString& name, wxBitmapType type ) const;
404 virtual bool SaveFile( const wxString& name, const wxString& mimetype ) const;
405
406 #if wxUSE_STREAMS
407 virtual bool SaveFile( wxOutputStream& stream, wxBitmapType type ) const;
408 virtual bool SaveFile( wxOutputStream& stream, const wxString& mimetype ) const;
409 #endif
410
411 bool Ok() const { return IsOk(); }
412 bool IsOk() const;
413 int GetWidth() const;
414 int GetHeight() const;
415
416 wxSize GetSize() const
417 { return wxSize(GetWidth(), GetHeight()); }
418
419 // Gets the type of image found by LoadFile or specified with SaveFile
420 wxBitmapType GetType() const;
421
422 // Set the image type, this is normally only called if the image is being
423 // created from data in the given format but not using LoadFile() (e.g.
424 // wxGIFDecoder uses this)
425 void SetType(wxBitmapType type);
426
427 // these functions provide fastest access to wxImage data but should be
428 // used carefully as no checks are done
429 unsigned char *GetData() const;
430 void SetData( unsigned char *data, bool static_data=false );
431 void SetData( unsigned char *data, int new_width, int new_height, bool static_data=false );
432
433 unsigned char *GetAlpha() const; // may return NULL!
434 bool HasAlpha() const { return GetAlpha() != NULL; }
435 void SetAlpha(unsigned char *alpha = NULL, bool static_data=false);
436 void InitAlpha();
437
438 // return true if this pixel is masked or has alpha less than specified
439 // threshold
440 bool IsTransparent(int x, int y,
441 unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD) const;
442
443 // Mask functions
444 void SetMaskColour( unsigned char r, unsigned char g, unsigned char b );
445 // Get the current mask colour or find a suitable colour
446 // returns true if using current mask colour
447 bool GetOrFindMaskColour( unsigned char *r, unsigned char *g, unsigned char *b ) const;
448 unsigned char GetMaskRed() const;
449 unsigned char GetMaskGreen() const;
450 unsigned char GetMaskBlue() const;
451 void SetMask( bool mask = true );
452 bool HasMask() const;
453
454 #if wxUSE_PALETTE
455 // Palette functions
456 bool HasPalette() const;
457 const wxPalette& GetPalette() const;
458 void SetPalette(const wxPalette& palette);
459 #endif // wxUSE_PALETTE
460
461 // Option functions (arbitrary name/value mapping)
462 void SetOption(const wxString& name, const wxString& value);
463 void SetOption(const wxString& name, int value);
464 wxString GetOption(const wxString& name) const;
465 int GetOptionInt(const wxString& name) const;
466 bool HasOption(const wxString& name) const;
467
468 unsigned long CountColours( unsigned long stopafter = (unsigned long) -1 ) const;
469
470 // Computes the histogram of the image and fills a hash table, indexed
471 // with integer keys built as 0xRRGGBB, containing wxImageHistogramEntry
472 // objects. Each of them contains an 'index' (useful to build a palette
473 // with the image colours) and a 'value', which is the number of pixels
474 // in the image with that colour.
475 // Returned value: # of entries in the histogram
476 unsigned long ComputeHistogram( wxImageHistogram &h ) const;
477
478 // Rotates the hue of each pixel of the image. angle is a double in the range
479 // -1.0..1.0 where -1.0 is -360 degrees and 1.0 is 360 degrees
480 void RotateHue(double angle);
481
482 static wxList& GetHandlers() { return sm_handlers; }
483 static void AddHandler( wxImageHandler *handler );
484 static void InsertHandler( wxImageHandler *handler );
485 static bool RemoveHandler( const wxString& name );
486 static wxImageHandler *FindHandler( const wxString& name );
487 static wxImageHandler *FindHandler( const wxString& extension, wxBitmapType imageType );
488 static wxImageHandler *FindHandler( wxBitmapType imageType );
489
490 static wxImageHandler *FindHandlerMime( const wxString& mimetype );
491
492 static wxString GetImageExtWildcard();
493
494 static void CleanUpHandlers();
495 static void InitStandardHandlers();
496
497 static HSVValue RGBtoHSV(const RGBValue& rgb);
498 static RGBValue HSVtoRGB(const HSVValue& hsv);
499
500 #if WXWIN_COMPATIBILITY_2_8
501 wxDEPRECATED_CONSTRUCTOR(
502 wxImage(const wxString& name, long type, int index = -1)
503 {
504 LoadFile(name, (wxBitmapType)type, index);
505 }
506 )
507
508 #if wxUSE_STREAMS
509 wxDEPRECATED_CONSTRUCTOR(
510 wxImage(wxInputStream& stream, long type, int index = -1)
511 {
512 LoadFile(stream, (wxBitmapType)type, index);
513 }
514 )
515
516 wxDEPRECATED(
517 bool LoadFile(wxInputStream& stream, long type, int index = -1)
518 {
519 return LoadFile(stream, (wxBitmapType)type, index);
520 }
521 )
522
523 wxDEPRECATED(
524 bool SaveFile(wxOutputStream& stream, long type) const
525 {
526 return SaveFile(stream, (wxBitmapType)type);
527 }
528 )
529 #endif // wxUSE_STREAMS
530
531 wxDEPRECATED(
532 bool LoadFile(const wxString& name, long type, int index = -1)
533 {
534 return LoadFile(name, (wxBitmapType)type, index);
535 }
536 )
537
538 wxDEPRECATED(
539 bool SaveFile(const wxString& name, long type) const
540 {
541 return SaveFile(name, (wxBitmapType)type);
542 }
543 )
544
545 wxDEPRECATED(
546 static wxImageHandler *FindHandler(const wxString& ext, long type)
547 {
548 return FindHandler(ext, (wxBitmapType)type);
549 }
550 )
551
552 wxDEPRECATED(
553 static wxImageHandler *FindHandler(long imageType)
554 {
555 return FindHandler((wxBitmapType)imageType);
556 }
557 )
558 #endif // WXWIN_COMPATIBILITY_2_8
559
560 protected:
561 static wxList sm_handlers;
562
563 // return the index of the point with the given coordinates or -1 if the
564 // image is invalid of the coordinates are out of range
565 //
566 // note that index must be multiplied by 3 when using it with RGB array
567 long XYToIndex(int x, int y) const;
568
569 virtual wxObjectRefData* CreateRefData() const;
570 virtual wxObjectRefData* CloneRefData(const wxObjectRefData* data) const;
571
572 private:
573 friend class WXDLLIMPEXP_FWD_CORE wxImageHandler;
574
575 #if wxUSE_STREAMS
576 // read the image from the specified stream updating image type if
577 // successful
578 bool DoLoad(wxImageHandler& handler, wxInputStream& stream, int index);
579
580 // write the image to the specified stream and also update the image type
581 // if successful
582 bool DoSave(wxImageHandler& handler, wxOutputStream& stream) const;
583 #endif // wxUSE_STREAMS
584
585 DECLARE_DYNAMIC_CLASS(wxImage)
586 };
587
588
589 extern void WXDLLIMPEXP_CORE wxInitAllImageHandlers();
590
591 extern WXDLLIMPEXP_DATA_CORE(wxImage) wxNullImage;
592
593 //-----------------------------------------------------------------------------
594 // wxImage handlers
595 //-----------------------------------------------------------------------------
596
597 #include "wx/imagbmp.h"
598 #include "wx/imagpng.h"
599 #include "wx/imaggif.h"
600 #include "wx/imagpcx.h"
601 #include "wx/imagjpeg.h"
602 #include "wx/imagtga.h"
603 #include "wx/imagtiff.h"
604 #include "wx/imagpnm.h"
605 #include "wx/imagxpm.h"
606 #include "wx/imagiff.h"
607
608 #endif // wxUSE_IMAGE
609
610 #endif
611 // _WX_IMAGE_H_