]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/image/image.cpp
compilation fix
[wxWidgets.git] / samples / image / image.cpp
index 85358943f9df08a90569bd0c9837ec235de84ef2..0fe93285b922d6592ec612daeaaf4132fba3a040 100644 (file)
@@ -17,7 +17,7 @@
 #endif
 
 #ifndef WX_PRECOMP
-#include "wx/wx.h"
+    #include "wx/wx.h"
 #endif
 
 #include "wx/image.h"
@@ -89,7 +89,11 @@ public:
     wxBitmap my_toucan_flipped_horiz;
     wxBitmap my_toucan_flipped_vert;
     wxBitmap my_toucan_flipped_both;
+    wxBitmap my_toucan_grey;
     wxBitmap my_toucan_head;
+    wxBitmap my_toucan_scaled_normal;
+    wxBitmap my_toucan_scaled_high;
+    wxBitmap my_toucan_blur;
 
     int xH, yH ;
     int m_ani_images;
@@ -301,28 +305,31 @@ public:
 
     MyRawBitmapFrame(wxFrame *parent)
         : wxFrame(parent, wxID_ANY, _T("Raw bitmaps (how exciting)")),
-          m_bitmap(SIZE, SIZE, 32)
+          m_bitmap(SIZE, SIZE, 24),
+          m_alphaBitmap(SIZE, SIZE, 32)
     {
-        SetClientSize(SIZE, SIZE);
+        SetClientSize(SIZE, SIZE*2+25);
 
-        // another possibility: wxNativePixelData (don't forget to remove code
-        // setting alpha in the loop below then)
-        typedef wxAlphaPixelData Data;
-        // typedef wxNativePixelData Data;
+        InitAlphaBitmap();
+        InitBitmap();
 
+    }
+
+    void InitAlphaBitmap()
+    {
         // First, clear the whole bitmap by making it alpha
         {
-            Data data( m_bitmap, wxPoint(0,0), wxSize(SIZE, SIZE) );
+            wxAlphaPixelData data( m_alphaBitmap, wxPoint(0,0), wxSize(SIZE, SIZE) );
             if ( !data )
             {
                 wxLogError(_T("Failed to gain raw access to bitmap data"));
                 return;
             }
             data.UseAlpha();
-            Data::Iterator p(data);
+            wxAlphaPixelData::Iterator p(data);
             for ( int y = 0; y < SIZE; ++y )
             {
-                Data::Iterator rowStart = p;
+                wxAlphaPixelData::Iterator rowStart = p;
                 for ( int x = 0; x < SIZE; ++x )
                 {
                     p.Alpha() = 0;
@@ -334,7 +341,8 @@ public:
         }
 
         // Then, draw colourful alpha-blended stripes
-        Data data(m_bitmap, wxPoint(BORDER, BORDER) , wxSize(REAL_SIZE, REAL_SIZE));
+        wxAlphaPixelData data(m_alphaBitmap, wxPoint(BORDER, BORDER),
+                              wxSize(REAL_SIZE, REAL_SIZE));
         if ( !data )
         {
             wxLogError(_T("Failed to gain raw access to bitmap data"));
@@ -342,12 +350,11 @@ public:
         }
 
         data.UseAlpha();
-
-        Data::Iterator p(data);
+        wxAlphaPixelData::Iterator p(data);
 
         for ( int y = 0; y < REAL_SIZE; ++y )
         {
-            Data::Iterator rowStart = p;
+            wxAlphaPixelData::Iterator rowStart = p;
 
             int r = y < REAL_SIZE/3 ? 255 : 0,
                 g = (REAL_SIZE/3 <= y) && (y < 2*(REAL_SIZE/3)) ? 255 : 0,
@@ -356,7 +363,7 @@ public:
             for ( int x = 0; x < REAL_SIZE; ++x )
             {
                 // note that RGB must be premultiplied by alpha
-                unsigned a = (Data::Iterator::ChannelType)((x*255.)/REAL_SIZE);
+                unsigned a = (wxAlphaPixelData::Iterator::ChannelType)((x*255.)/REAL_SIZE);
                 p.Red() = r * a / 256;
                 p.Green() = g * a / 256;
                 p.Blue() = b * a / 256;
@@ -370,17 +377,53 @@ public:
         }
     }
 
+    void InitBitmap()
+    {
+        // draw some colourful stripes without alpha
+        wxNativePixelData data(m_bitmap);
+        if ( !data )
+        {
+            wxLogError(_T("Failed to gain raw access to bitmap data"));
+            return;
+        }
+
+        wxNativePixelData::Iterator p(data);
+        for ( int y = 0; y < SIZE; ++y )
+        {
+            wxNativePixelData::Iterator rowStart = p;
+
+            int r = y < SIZE/3 ? 255 : 0,
+                g = (SIZE/3 <= y) && (y < 2*(SIZE/3)) ? 255 : 0,
+                b = 2*(SIZE/3) <= y ? 255 : 0;
+
+            for ( int x = 0; x < SIZE; ++x )
+            {
+                p.Red() = r;
+                p.Green() = g;
+                p.Blue() = b;
+                ++p; // same as p.OffsetX(1)
+            }
+
+            p = rowStart;
+            p.OffsetY(data, 1);
+        }
+    }
+
     void OnPaint(wxPaintEvent& WXUNUSED(event))
     {
         wxPaintDC dc( this );
         dc.DrawText(_T("This is alpha and raw bitmap test"), 0, BORDER);
         dc.DrawText(_T("This is alpha and raw bitmap test"), 0, SIZE/2 - BORDER);
         dc.DrawText(_T("This is alpha and raw bitmap test"), 0, SIZE - 2*BORDER);
-        dc.DrawBitmap( m_bitmap, 0, 0, true /* use mask */ );
+        dc.DrawBitmap( m_alphaBitmap, 0, 0, true /* use mask */ );
+
+        dc.DrawText(_T("Raw bitmap access without alpha"), 0, SIZE+5);
+        dc.DrawBitmap( m_bitmap, 0, SIZE+5+dc.GetCharHeight());
     }
 
 private:
     wxBitmap m_bitmap;
+    wxBitmap m_alphaBitmap;
 
     DECLARE_EVENT_TABLE()
 };
@@ -468,12 +511,19 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id,
     else
         my_horse_png = wxBitmap( image );
 
-    image = wxImage(wxT("toucan.png"));
-    my_toucan = wxBitmap(image);
+    if ( !image.LoadFile( dir + _T("toucan.png")) )
+        wxLogError(wxT("Can't load PNG image"));
+    else
+        my_toucan = wxBitmap(image);
+
     my_toucan_flipped_horiz = wxBitmap(image.Mirror(true));
     my_toucan_flipped_vert = wxBitmap(image.Mirror(false));
     my_toucan_flipped_both = wxBitmap(image.Mirror(true).Mirror(false));
+    my_toucan_grey = wxBitmap(image.ConvertToGreyscale());
     my_toucan_head = wxBitmap(image.GetSubImage(wxRect(40, 7, 80, 60)));
+    my_toucan_scaled_normal = wxBitmap(image.Scale(110,90,wxIMAGE_QUALITY_NORMAL));
+    my_toucan_scaled_high = wxBitmap(image.Scale(110,90,wxIMAGE_QUALITY_HIGH));
+    my_toucan_blur = wxBitmap(image.Blur(10));
 
 #endif // wxUSE_LIBPNG
 
@@ -741,20 +791,36 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
         int x = 750, y = 10, yy = 170;
 
         dc.DrawText(wxT("Original toucan"), x+50, y);
-        dc.DrawBitmap(my_toucan, x, y+15);
+        dc.DrawBitmap(my_toucan, x, y+15, true);
         y += yy;
         dc.DrawText(wxT("Flipped horizontally"), x+50, y);
-        dc.DrawBitmap(my_toucan_flipped_horiz, x, y+15);
+        dc.DrawBitmap(my_toucan_flipped_horiz, x, y+15, true);
         y += yy;
         dc.DrawText(wxT("Flipped vertically"), x+50, y);
-        dc.DrawBitmap(my_toucan_flipped_vert, x, y+15);
+        dc.DrawBitmap(my_toucan_flipped_vert, x, y+15, true);
         y += yy;
         dc.DrawText(wxT("Flipped both h&v"), x+50, y);
-        dc.DrawBitmap(my_toucan_flipped_both, x, y+15);
+        dc.DrawBitmap(my_toucan_flipped_both, x, y+15, true);
+
+        y += yy;
+        dc.DrawText(wxT("In greyscale"), x+50, y);
+        dc.DrawBitmap(my_toucan_grey, x, y+15, true);
 
         y += yy;
         dc.DrawText(wxT("Toucan's head"), x+50, y);
-        dc.DrawBitmap(my_toucan_head, x, y+15);
+        dc.DrawBitmap(my_toucan_head, x, y+15, true);
+
+        y += yy;
+        dc.DrawText(wxT("Scaled with normal quality"), x+50, y);
+        dc.DrawBitmap(my_toucan_scaled_normal, x, y+15, true);
+
+        y += yy;
+        dc.DrawText(wxT("Scaled with high quality"), x+50, y);
+        dc.DrawBitmap(my_toucan_scaled_high, x, y+15, true);
+
+        y += yy;
+        dc.DrawText(wxT("Blured"), x+50, y);
+        dc.DrawBitmap(my_toucan_blur, x, y+15, true);
     }
 
     if (my_smile_xbm.Ok())
@@ -765,7 +831,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
         dc.SetTextBackground( _T("RED") );
         dc.DrawBitmap( my_smile_xbm, 30, 2010 );
 
-        dc.SetTextForeground( wxT("BLACK") );
+        dc.SetTextForeground( *wxBLACK );
         dc.DrawText( _T("After wxImage conversion"), 150, 1975 );
         dc.DrawText( _T("(red on white)"), 150, 1990 );
         dc.SetTextForeground( wxT("RED") );
@@ -776,7 +842,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
                wxRED_PEN->GetColour().Green(),
                wxRED_PEN->GetColour().Blue() );
         dc.DrawBitmap( wxBitmap(i), 150, 2010, true );
-        dc.SetTextForeground( wxT("BLACK") );
+        dc.SetTextForeground( *wxBLACK );
     }
 
 
@@ -805,7 +871,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
         dc.SetTextBackground( wxT("GREEN") );
         dc.DrawBitmap( mono, 30, 2130 );
 
-        dc.SetTextForeground( wxT("BLACK") );
+        dc.SetTextForeground( *wxBLACK );
         dc.DrawText( _T("After wxImage conversion"), 150, 2095 );
         dc.DrawText( _T("(red on white)"), 150, 2110 );
         dc.SetTextForeground( wxT("RED") );
@@ -816,7 +882,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
                wxRED_PEN->GetColour().Green(),
                wxRED_PEN->GetColour().Blue() );
         dc.DrawBitmap( wxBitmap(i), 150, 2130, true );
-        dc.SetTextForeground( wxT("BLACK") );
+        dc.SetTextForeground( *wxBLACK );
     }
 
     // For testing transparency