]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_image.i
new wxMediaCtrl API
[wxWidgets.git] / wxPython / src / _image.i
index 4f35d16f6be617d410b621688d90e33753959561..ea4cca9f1000ff7473102c9519f58840b511b1d4 100644 (file)
@@ -84,17 +84,18 @@ public:
     %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);
@@ -103,10 +104,28 @@ public:
                 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();
 
@@ -133,7 +152,30 @@ public:
 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);
@@ -187,7 +229,8 @@ success flag and rgb values.", "");
             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 */ ;
             }
 
@@ -283,13 +326,13 @@ success flag and rgb values.", "");
     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 );
@@ -312,9 +355,12 @@ success flag and rgb values.", "");
     static wxString GetImageExtWildcard();
 
 
+MustHaveApp(ConvertToBitmap);
+MustHaveApp(ConvertToMonoBitmap);
+
     %extend {
-        wxBitmap ConvertToBitmap() {
-            wxBitmap bitmap(*self);
+        wxBitmap ConvertToBitmap(int depth=-1) {
+            wxBitmap bitmap(*self, depth);
             return bitmap;
         }
 
@@ -332,7 +378,17 @@ success flag and rgb values.", "");
 
 
 
-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
@@ -347,7 +403,7 @@ MAKE_CONST_WXSTRING(IMAGE_OPTION_BMP_FORMAT);
 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
 {
@@ -441,4 +497,45 @@ public:
 };
 #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);
+        }
+    }
+};
+
+
 //---------------------------------------------------------------------------