public:
wxImageHistogram();
- // get the key in the histogram for the given RGB values
+ DocStr(MakeKey, "Get the key in the histogram for the given RGB values", "");
static unsigned long MakeKey(unsigned char r,
unsigned char g,
unsigned char b);
- // find first colour that is not used in the image and has higher
- // RGB values than RGB(startR, startG, startB)
- //
- // returns true and puts this colour in r, g, b (each of which may be NULL)
- // on success or returns false if there are no more free colours
- bool FindFirstUnusedColour(unsigned char *OUTPUT,
- unsigned char *OUTPUT,
- unsigned char *OUTPUT,
- unsigned char startR = 1,
- unsigned char startG = 0,
- unsigned char startB = 0 ) const;
+ DocDeclAStr(
+ bool, FindFirstUnusedColour(unsigned char *OUTPUT,
+ unsigned char *OUTPUT,
+ unsigned char *OUTPUT,
+ unsigned char startR = 1,
+ unsigned char startG = 0,
+ unsigned char startB = 0 ) const,
+ "FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -> (success, r, g, b)",
+ "Find first colour that is not used in the image and has higher RGB
+values than startR, startG, startB. Returns a tuple consisting of a
+success flag and rgb values.", "");
};
%name(ImageFromStream) wxImage(wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1);
%name(ImageFromStreamMime) wxImage(wxInputStream& stream, const wxString& mimetype, int index = -1 );
%extend {
- %name(EmptyImage) wxImage(int width=0, int height=0, bool clear = TRUE) {
+ %name(EmptyImage) wxImage(int width=0, int height=0, bool clear = true) {
if (width > 0 && height > 0)
return new wxImage(width, height, clear);
else
return new wxImage;
- }
-
+ }
+
+ MustHaveApp(wxImage(const wxBitmap &bitmap));
%name(ImageFromBitmap) wxImage(const wxBitmap &bitmap) {
return new wxImage(bitmap.ConvertToImage());
}
-
+
%name(ImageFromData) wxImage(int width, int height, unsigned char* data) {
// Copy the source data so the wxImage can clean it up later
unsigned char* copy = (unsigned char*)malloc(width*height*3);
return NULL;
}
memcpy(copy, data, width*height*3);
- return new wxImage(width, height, copy, FALSE);
+ return new wxImage(width, height, copy, false);
+ }
+ %name(ImageFromDataWithAlpha) wxImage(int width, int height,
+ unsigned char* data, unsigned char* alpha) {
+ // Copy the source data so the wxImage can clean it up later
+ unsigned char* dcopy = (unsigned char*)malloc(width*height*3);
+ if (dcopy == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+ memcpy(dcopy, data, width*height*3);
+ unsigned char* acopy = (unsigned char*)malloc(width*height);
+ if (acopy == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+ memcpy(acopy, alpha, width*height);
+
+ return new wxImage(width, height, dcopy, acopy, false);
}
}
-
+
void Create( int width, int height );
void Destroy();
// find first colour that is not used in the image and has higher
// RGB values than <startR,startG,startB>
- bool FindFirstUnusedColour( byte *OUTPUT, byte *OUTPUT, byte *OUTPUT,
- byte startR = 0, byte startG = 0, byte startB = 0 ) const;
+ DocDeclAStr(
+ bool, FindFirstUnusedColour( byte *OUTPUT, byte *OUTPUT, byte *OUTPUT,
+ byte startR = 0, byte startG = 0, byte startB = 0 ) const,
+ "FindFirstUnusedColour(int startR=1, int startG=0, int startB=0) -> (success, r, g, b)",
+ "Find first colour that is not used in the image and has higher RGB
+values than startR, startG, startB. Returns a tuple consisting of a
+success flag and rgb values.", "");
+
+
+ DocDeclStr(
+ bool , ConvertAlphaToMask(byte threshold = 128),
+ "If the image has alpha channel, this method converts it to mask. All pixels
+with alpha value less than ``threshold`` are replaced with mask colour and the
+alpha channel is removed. Mask colour is chosen automatically using
+`FindFirstUnusedColour`.
+
+If the image image doesn't have alpha channel, ConvertAlphaToMask does
+nothing.", "");
+
+
+ DocDeclStr(
+ bool , ConvertColourToAlpha( unsigned char r, unsigned char g, unsigned char b ),
+ "This method converts an image where the original alpha information is
+only available as a shades of a colour (actually shades of grey)
+typically when you draw anti-aliased text into a bitmap. The DC
+drawing routines draw grey values on the black background although
+they actually mean to draw white with differnt alpha values. This
+method reverses it, assuming a black (!) background and white text.
+The method will then fill up the whole image with the colour given.", "");
+
+
// Set image's mask to the area of 'mask' that has <mr,mg,mb> colour
bool SetMaskFromImage(const wxImage & mask,
byte mr, byte mg, byte mb);
int GetWidth();
int GetHeight();
+ %extend {
+ wxSize GetSize() {
+ wxSize size(self->GetWidth(), self->GetHeight());
+ return size;
+ }
+ }
+
wxImage GetSubImage(const wxRect& rect);
wxImage Copy();
void Paste( const wxImage &image, int x, int y );
unsigned char* dataPtr;
if (! PyString_Check(data)) {
- PyErr_SetString(PyExc_TypeError, "Expected string object");
+ wxPyBLOCK_THREADS(PyErr_SetString(PyExc_TypeError,
+ "Expected string object"));
return /* NULL */ ;
}
unsigned char* buffer;
int size;
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
if (!PyArg_Parse(data, "t#", &buffer, &size))
goto done;
}
self->SetData(buffer);
done:
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
unsigned char* buffer;
int size;
- wxPyBeginBlockThreads();
+ bool blocked = wxPyBeginBlockThreads();
if (!PyArg_Parse(data, "t#", &buffer, &size))
goto done;
}
self->SetAlpha(buffer);
done:
- wxPyEndBlockThreads();
+ wxPyEndBlockThreads(blocked);
}
}
unsigned char GetMaskRed();
unsigned char GetMaskGreen();
unsigned char GetMaskBlue();
- void SetMask( bool mask = TRUE );
+ void SetMask( bool mask = true );
bool HasMask();
wxImage Rotate(double angle, const wxPoint & centre_of_rotation,
- bool interpolating = TRUE, wxPoint * offset_after_rotation = NULL) const ;
- wxImage Rotate90( bool clockwise = TRUE ) ;
- wxImage Mirror( bool horizontally = TRUE ) ;
+ bool interpolating = true, wxPoint * offset_after_rotation = NULL) const ;
+ wxImage Rotate90( bool clockwise = true ) ;
+ wxImage Mirror( bool horizontally = true ) ;
void Replace( unsigned char r1, unsigned char g1, unsigned char b1,
unsigned char r2, unsigned char g2, unsigned char b2 );
static wxString GetImageExtWildcard();
+MustHaveApp(ConvertToBitmap);
+MustHaveApp(ConvertToMonoBitmap);
+
%extend {
- wxBitmap ConvertToBitmap() {
- wxBitmap bitmap(*self);
+ wxBitmap ConvertToBitmap(int depth=-1) {
+ wxBitmap bitmap(*self, depth);
return bitmap;
}
-void wxInitAllImageHandlers();
+///void wxInitAllImageHandlers();
+
+%pythoncode {
+ def InitAllImageHandlers():
+ """
+ The former functionality of InitAllImageHanders is now done internal to
+ the _core_ extension module and so this function has become a simple NOP.
+ """
+ pass
+}
+
// See also wxPy_ReinitStockObjects in helpers.cpp
MAKE_CONST_WXSTRING(IMAGE_OPTION_CUR_HOTSPOT_X);
MAKE_CONST_WXSTRING(IMAGE_OPTION_CUR_HOTSPOT_Y);
MAKE_CONST_WXSTRING(IMAGE_OPTION_RESOLUTION);
-MAKE_CONST_WXSTRING(IMAGE_OPTION_RESOLUTIONUNIT);
+MAKE_CONST_WXSTRING(IMAGE_OPTION_RESOLUTIONUNIT);
enum
{
};
#endif
+//---------------------------------------------------------------------------
+
+%{
+#include <wx/quantize.h>
+%}
+
+enum {
+ wxQUANTIZE_INCLUDE_WINDOWS_COLOURS,
+// wxQUANTIZE_RETURN_8BIT_DATA,
+ wxQUANTIZE_FILL_DESTINATION_IMAGE
+};
+
+
+DocStr(wxQuantize,
+ "Performs quantization, or colour reduction, on a wxImage.", "");
+
+class wxQuantize /*: public wxObject */
+{
+public:
+
+ %extend {
+ DocStr(
+ Quantize,
+ "Reduce the colours in the source image and put the result into the
+destination image, setting the palette in the destination if
+needed. Both images may be the same, to overwrite the source image.", "
+:todo: Create a version that returns the wx.Palette used.");
+
+ static bool Quantize(const wxImage& src, wxImage& dest, int desiredNoColours = 236,
+ int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE)
+ {
+ return wxQuantize::Quantize(src, dest,
+ //NULL, // palette
+ desiredNoColours,
+ NULL, // eightBitData
+ flags);
+ }
+ }
+};
+
+
//---------------------------------------------------------------------------