1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: SWIG definitions for wxImage and such
7 // Created: 25-Sept-2000
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
16 //---------------------------------------------------------------------------
19 #include "wx/wxPython/pyistream.h"
22 //---------------------------------------------------------------------------
26 class wxImageHandler : public wxObject {
28 // wxImageHandler(); Abstract Base Class
30 wxString GetExtension();
32 wxString GetMimeType();
34 //bool LoadFile(wxImage* image, wxInputStream& stream);
35 //bool SaveFile(wxImage* image, wxOutputStream& stream);
36 //virtual int GetImageCount( wxInputStream& stream );
37 //bool CanRead( wxInputStream& stream );
39 bool CanRead( const wxString& name );
41 void SetName(const wxString& name);
42 void SetExtension(const wxString& extension);
43 void SetType(long type);
44 void SetMimeType(const wxString& mimetype);
48 //---------------------------------------------------------------------------
50 class wxImageHistogram /* : public wxImageHistogramBase */
55 DocStr(MakeKey, "Get the key in the histogram for the given RGB values", "");
56 static unsigned long MakeKey(unsigned char r,
61 bool, FindFirstUnusedColour(unsigned char *OUTPUT,
62 unsigned char *OUTPUT,
63 unsigned char *OUTPUT,
64 unsigned char startR = 1,
65 unsigned char startG = 0,
66 unsigned char startB = 0 ) const,
67 "FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -> (success, r, g, b)",
68 "Find first colour that is not used in the image and has higher RGB
69 values than startR, startG, startB. Returns a tuple consisting of a
70 success flag and rgb values.", "");
74 //---------------------------------------------------------------------------
77 class wxImage : public wxObject {
79 wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
82 // Alternate constructors
83 %name(ImageFromMime) wxImage(const wxString& name, const wxString& mimetype, int index = -1);
84 %name(ImageFromStream) wxImage(wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1);
85 %name(ImageFromStreamMime) wxImage(wxInputStream& stream, const wxString& mimetype, int index = -1 );
87 %name(EmptyImage) wxImage(int width=0, int height=0, bool clear = True) {
88 if (width > 0 && height > 0)
89 return new wxImage(width, height, clear);
94 %name(ImageFromBitmap) wxImage(const wxBitmap &bitmap) {
95 return new wxImage(bitmap.ConvertToImage());
98 %name(ImageFromData) wxImage(int width, int height, unsigned char* data) {
99 // Copy the source data so the wxImage can clean it up later
100 unsigned char* copy = (unsigned char*)malloc(width*height*3);
105 memcpy(copy, data, width*height*3);
106 return new wxImage(width, height, copy, False);
110 void Create( int width, int height );
113 wxImage Scale( int width, int height );
114 wxImage ShrinkBy( int xFactor , int yFactor ) const ;
115 wxImage& Rescale(int width, int height);
117 void SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b );
118 unsigned char GetRed( int x, int y );
119 unsigned char GetGreen( int x, int y );
120 unsigned char GetBlue( int x, int y );
122 void SetAlpha(int x, int y, unsigned char alpha);
123 unsigned char GetAlpha(int x, int y);
126 // find first colour that is not used in the image and has higher
127 // RGB values than <startR,startG,startB>
129 bool, FindFirstUnusedColour( byte *OUTPUT, byte *OUTPUT, byte *OUTPUT,
130 byte startR = 0, byte startG = 0, byte startB = 0 ) const,
131 "FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -> (success, r, g, b)",
132 "Find first colour that is not used in the image and has higher RGB
133 values than startR, startG, startB. Returns a tuple consisting of a
134 success flag and rgb values.", "");
137 // Set image's mask to the area of 'mask' that has <mr,mg,mb> colour
138 bool SetMaskFromImage(const wxImage & mask,
139 byte mr, byte mg, byte mb);
141 // void DoFloodFill (wxCoord x, wxCoord y,
142 // const wxBrush & fillBrush,
143 // const wxColour& testColour,
144 // int style = wxFLOOD_SURFACE,
145 // int LogicalFunction = wxCOPY /* currently unused */ ) ;
147 static bool CanRead( const wxString& name );
148 static int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY );
150 bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 );
151 %name(LoadMimeFile)bool LoadFile( const wxString& name, const wxString& mimetype, int index = -1 );
153 bool SaveFile( const wxString& name, int type );
154 %name(SaveMimeFile)bool SaveFile( const wxString& name, const wxString& mimetype );
156 %name(CanReadStream) static bool CanRead( wxInputStream& stream );
157 %name(LoadStream) bool LoadFile( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 );
158 %name(LoadMimeStream) bool LoadFile( wxInputStream& stream, const wxString& mimetype, int index = -1 );
166 wxSize size(self->GetWidth(), self->GetHeight());
171 wxImage GetSubImage(const wxRect& rect);
173 void Paste( const wxImage &image, int x, int y );
175 //unsigned char *GetData();
176 //void SetData( unsigned char *data );
179 PyObject* GetData() {
180 unsigned char* data = self->GetData();
181 int len = self->GetWidth() * self->GetHeight() * 3;
183 wxPyBLOCK_THREADS( rv = PyString_FromStringAndSize((char*)data, len));
186 void SetData(PyObject* data) {
187 unsigned char* dataPtr;
189 if (! PyString_Check(data)) {
190 PyErr_SetString(PyExc_TypeError, "Expected string object");
194 size_t len = self->GetWidth() * self->GetHeight() * 3;
195 dataPtr = (unsigned char*) malloc(len);
196 wxPyBLOCK_THREADS( memcpy(dataPtr, PyString_AsString(data), len) );
197 self->SetData(dataPtr);
198 // wxImage takes ownership of dataPtr...
203 PyObject* GetDataBuffer() {
204 unsigned char* data = self->GetData();
205 int len = self->GetWidth() * self->GetHeight() * 3;
207 wxPyBLOCK_THREADS( rv = PyBuffer_FromReadWriteMemory(data, len) );
210 void SetDataBuffer(PyObject* data) {
211 unsigned char* buffer;
214 bool blocked = wxPyBeginBlockThreads();
215 if (!PyArg_Parse(data, "t#", &buffer, &size))
218 if (size != self->GetWidth() * self->GetHeight() * 3) {
219 PyErr_SetString(PyExc_TypeError, "Incorrect buffer size");
222 self->SetData(buffer);
224 wxPyEndBlockThreads(blocked);
229 PyObject* GetAlphaData() {
230 unsigned char* data = self->GetAlpha();
234 int len = self->GetWidth() * self->GetHeight();
236 wxPyBLOCK_THREADS( rv = PyString_FromStringAndSize((char*)data, len) );
240 void SetAlphaData(PyObject* data) {
241 unsigned char* dataPtr;
243 if (! PyString_Check(data)) {
244 PyErr_SetString(PyExc_TypeError, "Expected string object");
248 size_t len = self->GetWidth() * self->GetHeight();
249 dataPtr = (unsigned char*) malloc(len);
250 wxPyBLOCK_THREADS( memcpy(dataPtr, PyString_AsString(data), len) );
251 self->SetAlpha(dataPtr);
252 // wxImage takes ownership of dataPtr...
257 PyObject* GetAlphaBuffer() {
258 unsigned char* data = self->GetAlpha();
259 int len = self->GetWidth() * self->GetHeight();
261 wxPyBLOCK_THREADS( rv = PyBuffer_FromReadWriteMemory(data, len) );
264 void SetAlphaBuffer(PyObject* data) {
265 unsigned char* buffer;
268 bool blocked = wxPyBeginBlockThreads();
269 if (!PyArg_Parse(data, "t#", &buffer, &size))
272 if (size != self->GetWidth() * self->GetHeight()) {
273 PyErr_SetString(PyExc_TypeError, "Incorrect buffer size");
276 self->SetAlpha(buffer);
278 wxPyEndBlockThreads(blocked);
282 void SetMaskColour( unsigned char r, unsigned char g, unsigned char b );
283 unsigned char GetMaskRed();
284 unsigned char GetMaskGreen();
285 unsigned char GetMaskBlue();
286 void SetMask( bool mask = True );
289 wxImage Rotate(double angle, const wxPoint & centre_of_rotation,
290 bool interpolating = True, wxPoint * offset_after_rotation = NULL) const ;
291 wxImage Rotate90( bool clockwise = True ) ;
292 wxImage Mirror( bool horizontally = True ) ;
294 void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
295 unsigned char r2, unsigned char g2, unsigned char b2 );
297 // convert to monochrome image (<r,g,b> will be replaced by white, everything else by black)
298 wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const;
300 void SetOption(const wxString& name, const wxString& value);
301 %name(SetOptionInt)void SetOption(const wxString& name, int value);
302 wxString GetOption(const wxString& name) const;
303 int GetOptionInt(const wxString& name) const;
304 bool HasOption(const wxString& name) const;
306 unsigned long CountColours( unsigned long stopafter = (unsigned long) -1 );
307 unsigned long ComputeHistogram( wxImageHistogram& h );
309 static void AddHandler( wxImageHandler *handler );
310 static void InsertHandler( wxImageHandler *handler );
311 static bool RemoveHandler( const wxString& name );
312 static wxString GetImageExtWildcard();
316 wxBitmap ConvertToBitmap() {
317 wxBitmap bitmap(*self);
321 wxBitmap ConvertToMonoBitmap( unsigned char red,
323 unsigned char blue ) {
324 wxImage mono = self->ConvertToMono( red, green, blue );
325 wxBitmap bitmap( mono, 1 );
330 %pythoncode { def __nonzero__(self): return self.Ok() }
335 ///void wxInitAllImageHandlers();
338 def InitAllImageHandlers():
340 The former functionality of InitAllImageHanders is now done internal to
341 the _core_ extension module and so this function has become a simple NOP.
348 // See also wxPy_ReinitStockObjects in helpers.cpp
350 const wxImage wxNullImage;
353 //---------------------------------------------------------------------------
356 MAKE_CONST_WXSTRING(IMAGE_OPTION_BMP_FORMAT);
357 MAKE_CONST_WXSTRING(IMAGE_OPTION_CUR_HOTSPOT_X);
358 MAKE_CONST_WXSTRING(IMAGE_OPTION_CUR_HOTSPOT_Y);
359 MAKE_CONST_WXSTRING(IMAGE_OPTION_RESOLUTION);
360 MAKE_CONST_WXSTRING(IMAGE_OPTION_RESOLUTIONUNIT);
364 wxIMAGE_RESOLUTION_INCHES = 1,
365 wxIMAGE_RESOLUTION_CM = 2
371 wxBMP_24BPP = 24, // default, do not need to set
372 //wxBMP_16BPP = 16, // wxQuantize can only do 236 colors?
373 wxBMP_8BPP = 8, // 8bpp, quantized colors
374 wxBMP_8BPP_GREY = 9, // 8bpp, rgb averaged to greys
375 wxBMP_8BPP_GRAY = wxBMP_8BPP_GREY,
376 wxBMP_8BPP_RED = 10, // 8bpp, red used as greyscale
377 wxBMP_8BPP_PALETTE = 11, // 8bpp, use the wxImage's palette
378 wxBMP_4BPP = 4, // 4bpp, quantized colors
379 wxBMP_1BPP = 1, // 1bpp, quantized "colors"
380 wxBMP_1BPP_BW = 2 // 1bpp, black & white from red
384 class wxBMPHandler : public wxImageHandler {
389 class wxICOHandler : public wxBMPHandler {
394 class wxCURHandler : public wxICOHandler {
399 class wxANIHandler : public wxCURHandler {
405 //---------------------------------------------------------------------------
407 class wxPNGHandler : public wxImageHandler {
413 class wxGIFHandler : public wxImageHandler {
419 class wxPCXHandler : public wxImageHandler {
425 class wxJPEGHandler : public wxImageHandler {
431 class wxPNMHandler : public wxImageHandler {
436 class wxXPMHandler : public wxImageHandler {
441 class wxTIFFHandler : public wxImageHandler {
448 class wxIFFHandler : public wxImageHandler {
454 //---------------------------------------------------------------------------