]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/image.h
optimize FindItem(data) performance (closes #9870)
[wxWidgets.git] / include / wx / image.h
index b40f7d305dc82e78702adfc1b195381bd5bedd81..49ea7b2229c3ae6c7620aae07dfcf67f1e82450d 100644 (file)
@@ -36,6 +36,9 @@
 
 #define wxIMAGE_OPTION_RESOLUTIONUNIT        wxString(_T("ResolutionUnit"))
 
+#define wxIMAGE_OPTION_MAX_WIDTH             wxString(_T("MaxWidth"))
+#define wxIMAGE_OPTION_MAX_HEIGHT            wxString(_T("MaxHeight"))
+
 // constants used with wxIMAGE_OPTION_RESOLUTIONUNIT
 //
 // NB: don't change these values, they correspond to libjpeg constants
@@ -105,10 +108,12 @@ public:
 
     void SetName(const wxString& name) { m_name = name; }
     void SetExtension(const wxString& ext) { m_extension = ext; }
+    void SetAltExtensions(const wxArrayString& exts) { m_altExtensions = exts; }
     void SetType(wxBitmapType type) { m_type = type; }
     void SetMimeType(const wxString& type) { m_mime = type; }
     const wxString& GetName() const { return m_name; }
     const wxString& GetExtension() const { return m_extension; }
+    const wxArrayString& GetAltExtensions() const { return m_altExtensions; }
     wxBitmapType GetType() const { return m_type; }
     const wxString& GetMimeType() const { return m_mime; }
 
@@ -135,6 +140,7 @@ protected:
 
     wxString  m_name;
     wxString  m_extension;
+    wxArrayString m_altExtensions;
     wxString  m_mime;
     wxBitmapType m_type;
 
@@ -215,28 +221,58 @@ public:
     };
 
     wxImage() {}
-    wxImage( int width, int height, bool clear = true );
-    wxImage( int width, int height, unsigned char* data, bool static_data = false );
-    wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false );
-    wxImage( const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 );
-    wxImage( const wxString& name, const wxString& mimetype, int index = -1 );
-    wxImage( const char* const* xpmData );
+    wxImage( int width, int height, bool clear = true )
+        { Create( width, height, clear ); }
+    wxImage( int width, int height, unsigned char* data, bool static_data = false )
+        { Create( width, height, data, static_data ); }
+    wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false )
+        { Create( width, height, data, alpha, static_data ); }
+
+    // ctor variants using wxSize:
+    wxImage( const wxSize& sz, bool clear = true )
+        { Create( sz, clear ); }
+    wxImage( const wxSize& sz, unsigned char* data, bool static_data = false )
+        { Create( sz, data, static_data ); }
+    wxImage( const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false )
+        { Create( sz, data, alpha, static_data ); }
+
+    wxImage( const wxString& name, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 )
+        { LoadFile( name, type, index ); }
+    wxImage( const wxString& name, const wxString& mimetype, int index = -1 )
+        { LoadFile( name, mimetype, index ); }
+    wxImage( const char* const* xpmData )
+        { Create(xpmData); }
 
 #if wxUSE_STREAMS
-    wxImage( wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 );
-    wxImage( wxInputStream& stream, const wxString& mimetype, int index = -1 );
+    wxImage( wxInputStream& stream, wxBitmapType type = wxBITMAP_TYPE_ANY, int index = -1 )
+        { LoadFile( stream, type, index ); }
+    wxImage( wxInputStream& stream, const wxString& mimetype, int index = -1 )
+        { LoadFile( stream, mimetype, index ); }
 #endif // wxUSE_STREAMS
 
-    bool Create( int width, int height, bool clear = true );
-    bool Create( int width, int height, unsigned char* data, bool static_data = false );
-    bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false );
     bool Create( const char* const* xpmData );
 #ifdef __BORLANDC__
     // needed for Borland 5.5
-    wxImage( char** xpmData ) { Create(wx_const_cast(const char* const*, xpmData)); }
-    bool Create( char** xpmData ) { return Create(wx_const_cast(const char* const*, xpmData)); }
+    wxImage( char** xpmData ) { Create(const_cast<const char* const*>(xpmData)); }
+    bool Create( char** xpmData ) { return Create(const_cast<const char* const*>(xpmData)); }
 #endif
+
+    bool Create( int width, int height, bool clear = true );
+    bool Create( int width, int height, unsigned char* data, bool static_data = false );
+    bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false );
+    
+    // Create() variants using wxSize:
+    bool Create( const wxSize& sz, bool clear = true )
+        { return Create(sz.GetWidth(), sz.GetHeight(), clear); }
+    bool Create( const wxSize& sz, unsigned char* data, bool static_data = false )
+        { return Create(sz.GetWidth(), sz.GetHeight(), data, static_data); }
+    bool Create( const wxSize& sz, unsigned char* data, unsigned char* alpha, bool static_data = false )
+        { return Create(sz.GetWidth(), sz.GetHeight(), data, alpha, static_data); }
+
     void Destroy();
+   
+    // initialize the image data with zeroes
+    void Clear(unsigned char value = 0);
 
     // creates an identical copy of the image (the = operator
     // just raises the ref count)
@@ -280,7 +316,7 @@ public:
     // Rotates the image about the given point, 'angle' radians.
     // Returns the rotated image, leaving this image intact.
     wxImage Rotate(double angle, const wxPoint & centre_of_rotation,
-                   bool interpolating = true, wxPoint * offset_after_rotation = (wxPoint*) NULL) const;
+                   bool interpolating = true, wxPoint * offset_after_rotation = NULL) const;
 
     wxImage Rotate90( bool clockwise = true ) const;
     wxImage Mirror( bool horizontally = true ) const;
@@ -316,9 +352,13 @@ public:
     bool SetMaskFromImage(const wxImage & mask,
                           unsigned char mr, unsigned char mg, unsigned char mb);
 
-    // converts image's alpha channel to mask, if it has any, does nothing
-    // otherwise:
+    // converts image's alpha channel to mask (choosing mask colour
+    // automatically or using the specified colour for the mask), if it has
+    // any, does nothing otherwise:
     bool ConvertAlphaToMask(unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
+    void ConvertAlphaToMask(unsigned char mr, unsigned char mg, unsigned char mb,
+                            unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD);
+
 
     // This method converts an image where the original alpha
     // information is only available as a shades of a colour
@@ -358,6 +398,9 @@ public:
     int GetWidth() const;
     int GetHeight() const;
 
+    wxSize GetSize() const
+        { return wxSize(GetWidth(), GetHeight()); }
+
     // Gets the type of image found by LoadFile or specified with SaveFile
     wxBitmapType GetType() const;