X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ba4800d3aeb254dd00277ff0a71df9321ca692dc..2e51fb3041e78ef15506ed746ed5898536be5955:/include/wx/image.h diff --git a/include/wx/image.h b/include/wx/image.h index bc9ce0bfca..eb0d19b7db 100644 --- a/include/wx/image.h +++ b/include/wx/image.h @@ -18,6 +18,7 @@ #include "wx/string.h" #include "wx/gdicmn.h" #include "wx/hashmap.h" +#include "wx/arrstr.h" #if wxUSE_STREAMS # include "wx/stream.h" @@ -27,17 +28,17 @@ // which breaks the compilation below #undef index -#define wxIMAGE_OPTION_QUALITY wxString(_T("quality")) -#define wxIMAGE_OPTION_FILENAME wxString(_T("FileName")) +#define wxIMAGE_OPTION_QUALITY wxString(wxT("quality")) +#define wxIMAGE_OPTION_FILENAME wxString(wxT("FileName")) -#define wxIMAGE_OPTION_RESOLUTION wxString(_T("Resolution")) -#define wxIMAGE_OPTION_RESOLUTIONX wxString(_T("ResolutionX")) -#define wxIMAGE_OPTION_RESOLUTIONY wxString(_T("ResolutionY")) +#define wxIMAGE_OPTION_RESOLUTION wxString(wxT("Resolution")) +#define wxIMAGE_OPTION_RESOLUTIONX wxString(wxT("ResolutionX")) +#define wxIMAGE_OPTION_RESOLUTIONY wxString(wxT("ResolutionY")) -#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(_T("ResolutionUnit")) +#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(wxT("ResolutionUnit")) -#define wxIMAGE_OPTION_MAX_WIDTH wxString(_T("MaxWidth")) -#define wxIMAGE_OPTION_MAX_HEIGHT wxString(_T("MaxHeight")) +#define wxIMAGE_OPTION_MAX_WIDTH wxString(wxT("MaxWidth")) +#define wxIMAGE_OPTION_MAX_HEIGHT wxString(wxT("MaxHeight")) // constants used with wxIMAGE_OPTION_RESOLUTIONUNIT // @@ -55,10 +56,18 @@ enum wxImageResolution }; // Constants for wxImage::Scale() for determining the level of quality -enum +enum wxImageResizeQuality { - wxIMAGE_QUALITY_NORMAL = 0, - wxIMAGE_QUALITY_HIGH = 1 + // different image resizing algorithms used by Scale() and Rescale() + wxIMAGE_QUALITY_NEAREST = 0, + wxIMAGE_QUALITY_BILINEAR = 1, + wxIMAGE_QUALITY_BICUBIC = 2, + + // default quality is low (but fast) + wxIMAGE_QUALITY_NORMAL = wxIMAGE_QUALITY_NEAREST, + + // highest (but best) quality + wxIMAGE_QUALITY_HIGH = wxIMAGE_QUALITY_BICUBIC }; // alpha channel values: fully transparent, default threshold separating @@ -97,10 +106,17 @@ public: { } #if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); - - virtual int GetImageCount( wxInputStream& stream ); + // NOTE: LoadFile and SaveFile are not pure virtuals to allow derived classes + // to implement only one of the two + virtual bool LoadFile( wxImage *WXUNUSED(image), wxInputStream& WXUNUSED(stream), + bool WXUNUSED(verbose)=true, int WXUNUSED(index)=-1 ) + { return false; } + virtual bool SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSED(stream), + bool WXUNUSED(verbose)=true ) + { return false; } + + int GetImageCount( wxInputStream& stream ); + // save the stream position, call DoGetImageCount() and restore the position bool CanRead( wxInputStream& stream ) { return CallDoCanRead(stream); } bool CanRead( const wxString& name ); @@ -108,7 +124,7 @@ public: void SetName(const wxString& name) { m_name = name; } void SetExtension(const wxString& ext) { m_extension = ext; } - void SetAlExtensions(const wxArrayString& exts) { m_altExtensions = exts; } + 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; } @@ -125,6 +141,13 @@ public: protected: #if wxUSE_STREAMS + // NOTE: this function is allowed to change the current stream position + // since GetImageCount() will take care of restoring it later + virtual int DoGetImageCount( wxInputStream& WXUNUSED(stream) ) + { return 1; } // default return value is 1 image + + // NOTE: this function is allowed to change the current stream position + // since CallDoCanRead() will take care of restoring it later virtual bool DoCanRead( wxInputStream& stream ) = 0; // save the stream position, call DoCanRead() and restore the position @@ -221,29 +244,56 @@ 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(const_cast(xpmData)); } bool Create( char** xpmData ) { return Create(const_cast(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); @@ -266,10 +316,13 @@ public: void Paste( const wxImage &image, int x, int y ); // return the new image with size width*height - wxImage Scale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) const; + wxImage Scale( int width, int height, + wxImageResizeQuality quality = wxIMAGE_QUALITY_NORMAL ) const; // box averager and bicubic filters for up/down sampling + wxImage ResampleNearest(int width, int height) const; wxImage ResampleBox(int width, int height) const; + wxImage ResampleBilinear(int width, int height) const; wxImage ResampleBicubic(int width, int height) const; // blur the image according to the specified pixel radius @@ -280,7 +333,9 @@ public: wxImage ShrinkBy( int xFactor , int yFactor ) const ; // rescales the image in place - wxImage& Rescale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) { return *this = Scale(width, height, quality); } + wxImage& Rescale( int width, int height, + wxImageResizeQuality quality = wxIMAGE_QUALITY_NORMAL ) + { return *this = Scale(width, height, quality); } // resizes the image in place wxImage& Resize( const wxSize& size, const wxPoint& pos,