1 /////////////////////////////////////////////////////////////////////////////
 
   3 // Purpose:     SWIG interface file for wxImage, wxImageHandler, etc.
 
   7 // Created:     28-Apr-1999
 
   9 // Copyright:   (c) 1998 by Total Control Software
 
  10 // Licence:     wxWindows license
 
  11 /////////////////////////////////////////////////////////////////////////////
 
  18 #include "pyistream.h"
 
  22 //----------------------------------------------------------------------
 
  25 %include my_typemaps.i
 
  27 // Import some definitions of other classes, etc.
 
  33 //---------------------------------------------------------------------------
 
  35 class wxImageHandler : public wxObject {
 
  37     // wxImageHandler();    Abstract Base Class
 
  39     wxString GetExtension();
 
  41     wxString GetMimeType();
 
  43     //bool LoadFile(wxImage* image, wxInputStream& stream);
 
  44     //bool SaveFile(wxImage* image, wxOutputStream& stream);
 
  45     //virtual int GetImageCount( wxInputStream& stream );
 
  46     //bool CanRead( wxInputStream& stream );
 
  48     bool CanRead( const wxString& name );
 
  50     void SetName(const wxString& name);
 
  51     void SetExtension(const wxString& extension);
 
  52     void SetType(long type);
 
  53     void SetMimeType(const wxString& mimetype);
 
  56 //---------------------------------------------------------------------------
 
  58 class wxPNGHandler : public wxImageHandler {
 
  64 class wxJPEGHandler : public wxImageHandler {
 
  70 class wxBMPHandler : public wxImageHandler {
 
  75 class wxICOHandler : public wxBMPHandler {
 
  80 class wxCURHandler : public wxICOHandler {
 
  85 class wxANIHandler : public wxCURHandler {
 
  90 class wxGIFHandler : public wxImageHandler {
 
  95 class wxPNMHandler : public wxImageHandler {
 
 100 class wxPCXHandler : public wxImageHandler {
 
 105 class wxTIFFHandler : public wxImageHandler {
 
 112 //---------------------------------------------------------------------------
 
 114 class wxImage : public wxObject {
 
 116     wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
 
 119     void Create( int width, int height );
 
 122     wxImage Scale( int width, int height );
 
 123     wxImage& Rescale(int width, int height);
 
 125     void SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b );
 
 126     unsigned char GetRed( int x, int y );
 
 127     unsigned char GetGreen( int x, int y );
 
 128     unsigned char GetBlue( int x, int y );
 
 130     static bool CanRead( const wxString& name );
 
 131     static int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
 
 133     bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
 
 134     %name(LoadMimeFile)bool LoadFile( const wxString& name, const wxString& mimetype, int index = -1 );
 
 136     bool SaveFile( const wxString& name, int type );
 
 137     %name(SaveMimeFile)bool SaveFile( const wxString& name, const wxString& mimetype );
 
 139     %name(CanReadStream) static bool CanRead( wxInputStream& stream );
 
 140     %name(LoadStream) bool LoadFile( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 );
 
 141     %name(LoadMimeStream) bool LoadFile( wxInputStream& stream, const wxString& mimetype, int index = -1 );
 
 147     wxImage GetSubImage(const wxRect& rect);
 
 149     void Paste( const wxImage &image, int x, int y );
 
 151     //unsigned char *GetData();
 
 152     //void SetData( unsigned char *data );
 
 155         PyObject* GetData() {
 
 156             unsigned char* data = self->GetData();
 
 157             int len = self->GetWidth() * self->GetHeight() * 3;
 
 158             return PyString_FromStringAndSize((char*)data, len);
 
 161         void SetData(PyObject* data) {
 
 162             unsigned char* dataPtr;
 
 164             if (! PyString_Check(data)) {
 
 165                 PyErr_SetString(PyExc_TypeError, "Expected string object");
 
 169             size_t len = self->GetWidth() * self->GetHeight() * 3;
 
 170             dataPtr = (unsigned char*) malloc(len);
 
 171             memcpy(dataPtr, PyString_AsString(data), len);
 
 172             self->SetData(dataPtr);
 
 176     void SetMaskColour( unsigned char r, unsigned char g, unsigned char b );
 
 177     unsigned char GetMaskRed();
 
 178     unsigned char GetMaskGreen();
 
 179     unsigned char GetMaskBlue();
 
 180     void SetMask( bool mask = TRUE );
 
 183     wxImage Rotate(double angle, const wxPoint & centre_of_rotation,
 
 184                    bool interpolating = TRUE, wxPoint * offset_after_rotation = NULL) const ;
 
 185     wxImage Rotate90( bool clockwise = TRUE ) ;
 
 186     wxImage Mirror( bool horizontally = TRUE ) ;
 
 188     void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
 
 189                   unsigned char r2, unsigned char g2, unsigned char b2 );
 
 191     // convert to monochrome image (<r,g,b> will be replaced by white, everything else by black)
 
 192     wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const;
 
 194     void SetOption(const wxString& name, const wxString& value);
 
 195     %name(SetOptionInt)void SetOption(const wxString& name, int value);
 
 196     wxString GetOption(const wxString& name) const;
 
 197     int GetOptionInt(const wxString& name) const;
 
 198     bool HasOption(const wxString& name) const;
 
 200     unsigned long CountColours( unsigned long stopafter = (unsigned long) -1 );
 
 201     // TODO: unsigned long ComputeHistogram( wxHashTable &h );
 
 203     static void AddHandler( wxImageHandler *handler );
 
 204     static void InsertHandler( wxImageHandler *handler );
 
 205     static bool RemoveHandler( const wxString& name );
 
 209         wxBitmap ConvertToBitmap() {
 
 210             wxBitmap bitmap(*self);
 
 214         wxBitmap ConvertToMonoBitmap( unsigned char red,
 
 216                                       unsigned char blue ) {
 
 217             wxImage mono = self->ConvertToMono( red, green, blue );
 
 218             wxBitmap bitmap( mono, 1 );
 
 225 // Alternate constructors
 
 226 %new wxImage* wxEmptyImage(int width=0, int height=0);
 
 227 %new wxImage* wxImageFromMime(const wxString& name, const wxString& mimetype, int index = -1);
 
 228 %new wxImage* wxImageFromBitmap(const wxBitmap &bitmap);
 
 229 %new wxImage* wxImageFromData(int width, int height, unsigned char* data);
 
 230 %new wxImage* wxImageFromStream(wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1);
 
 231 %new wxImage* wxImageFromStreamMime(wxInputStream& stream, const wxString& mimetype, int index = -1 );
 
 234     wxImage* wxEmptyImage(int width=0, int height=0) {
 
 235         if (width == 0 && height == 0)
 
 238             return new wxImage(width, height);
 
 242     wxImage* wxImageFromMime(const wxString& name, const wxString& mimetype, int index) {
 
 243         return new wxImage(name, mimetype, index);
 
 247     wxImage* wxImageFromBitmap(const wxBitmap &bitmap) {
 
 248         return new wxImage(bitmap.ConvertToImage());
 
 252     wxImage* wxImageFromData(int width, int height, unsigned char* data) {
 
 253         // Copy the source data so the wxImage can clean it up later
 
 254         unsigned char* copy = (unsigned char*)malloc(width*height*3);
 
 259         memcpy(copy, data, width*height*3);
 
 260         return new wxImage(width, height, copy, FALSE);
 
 264     wxImage* wxImageFromStream(wxInputStream& stream,
 
 265                                long type = wxBITMAP_TYPE_ANY, int index = -1) {
 
 266         return new wxImage(stream, type, index);
 
 270     wxImage* wxImageFromStreamMime(wxInputStream& stream,
 
 271                                    const wxString& mimetype, int index = -1 ) {
 
 272         return new wxImage(stream, mimetype, index);
 
 278 void wxInitAllImageHandlers();
 
 286 extern wxImage    wxNullImage;
 
 295 //---------------------------------------------------------------------------
 
 296 // This one is here to avoid circular imports
 
 298 %new wxBitmap* wxBitmapFromImage(const wxImage& img, int depth=-1);
 
 301     wxBitmap* wxBitmapFromImage(const wxImage& img, int depth=-1) {
 
 302         return new wxBitmap(img, depth);
 
 308 //---------------------------------------------------------------------------