X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/91b073576e8fd216c71acacf5c1495e1a56dd39f..3786c8b587f82e406ba9656847b5bff4ed9209c2:/samples/image/image.cpp?ds=sidebyside diff --git a/samples/image/image.cpp b/samples/image/image.cpp index a0f10192d2..648c1b7d9d 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -84,6 +84,14 @@ public: wxBitmap *my_horse_asciigrey_pnm; wxBitmap *my_horse_rawgrey_pnm; + wxBitmap *colorized_horse_jpeg; + + wxBitmap my_toucan; + wxBitmap my_toucan_flipped_horiz; + wxBitmap my_toucan_flipped_vert; + wxBitmap my_toucan_flipped_both; + wxBitmap my_toucan_head; + int xH, yH ; int m_ani_images ; @@ -149,20 +157,21 @@ public: void OnSave(wxMouseEvent& WXUNUSED(event)) { +#if wxUSE_FILEDLG wxImage image = m_bitmap.ConvertToImage(); wxString savefilename = wxFileSelector( wxT("Save Image"), - wxT(""), - wxT(""), + wxEmptyString, + wxEmptyString, (const wxChar *)NULL, - wxT("BMP files (*.bmp)|*.bmp|") - wxT("PNG files (*.png)|*.png|") - wxT("JPEG files (*.jpg)|*.jpg|") - wxT("GIF files (*.gif)|*.gif|") - wxT("TIFF files (*.tif)|*.tif|") - wxT("PCX files (*.pcx)|*.pcx|") - wxT("ICO files (*.ico)|*.ico|") - wxT("CUR files (*.cur)|*.cur"), + wxT("BMP files (*.bmp)|*.bmp|") + wxT("PNG files (*.png)|*.png|") + wxT("JPEG files (*.jpg)|*.jpg|") + wxT("GIF files (*.gif)|*.gif|") + wxT("TIFF files (*.tif)|*.tif|") + wxT("PCX files (*.pcx)|*.pcx|") + wxT("ICO files (*.ico)|*.ico|") + wxT("CUR files (*.cur)|*.cur"), wxSAVE, this); @@ -216,7 +225,7 @@ public: cmap[i] = (unsigned char)i; image.SetPalette(wxPalette(256, cmap, cmap, cmap)); - delete cmap; + delete[] cmap; } } } @@ -269,6 +278,7 @@ public: // (it may fail if the extension is not recognized): image.SaveFile(savefilename); } +#endif // wxUSE_FILEDLG } private: @@ -300,8 +310,33 @@ public: // another possibility: wxNativePixelData (don't forget to remove code // setting alpha in the loop below then) typedef wxAlphaPixelData Data; + // typedef wxNativePixelData Data; + + // First, clear the whole bitmap by making it alpha + { + Data data( m_bitmap, 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); + for ( int y = 0; y < SIZE; ++y ) + { + Data::Iterator rowStart = p; + for ( int x = 0; x < SIZE; ++x ) + { + p.Alpha() = 0; + ++p; // same as p.OffsetX(1) + } + p = rowStart; + p.OffsetY(data, 1); + } + } - Data data(m_bitmap, wxPoint(BORDER, BORDER), wxSize(REAL_SIZE, REAL_SIZE)); + // Then, draw colourful alpha-blended stripes + Data data(m_bitmap, wxPoint(BORDER, BORDER) , wxSize(REAL_SIZE, REAL_SIZE)); if ( !data ) { wxLogError(_T("Failed to gain raw access to bitmap data")); @@ -408,6 +443,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, my_horse_ico = (wxBitmap*) NULL; my_horse_cur = (wxBitmap*) NULL; my_horse_ani = (wxBitmap*) NULL; + colorized_horse_jpeg = (wxBitmap*) NULL; my_smile_xbm = (wxBitmap*) NULL; my_square = (wxBitmap*) NULL; @@ -457,6 +493,14 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, wxLogError(wxT("Can't load PNG image")); else my_horse_png = new wxBitmap( image ); + + image = wxImage(wxT("toucan.png")); + 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_head = wxBitmap(image.GetSubImage(wxRect(40, 7, 80, 60))); + #endif // wxUSE_LIBPNG #if wxUSE_LIBJPEG @@ -465,7 +509,14 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + _T("horse.jpg")) ) wxLogError(wxT("Can't load JPG image")); else + { my_horse_jpeg = new wxBitmap( image ); + // Colorize by rotating green hue to red + wxImage::HSVValue greenHSV = wxImage::RGBtoHSV(wxImage::RGBValue(0, 255, 0)); + wxImage::HSVValue redHSV = wxImage::RGBtoHSV(wxImage::RGBValue(255, 0, 0)); + image.RotateHue(redHSV.hue - greenHSV.hue); + colorized_horse_jpeg = new wxBitmap( image ); + } #endif // wxUSE_LIBJPEG #if wxUSE_GIF @@ -644,6 +695,7 @@ MyCanvas::~MyCanvas() delete my_anti; delete my_horse_asciigrey_pnm; delete my_horse_rawgrey_pnm; + delete colorized_horse_jpeg; } void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) @@ -670,8 +722,8 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.DrawBitmap( *my_horse_png, 30, 150 ); wxRect rect(0,0,100,100); wxBitmap sub( my_horse_png->GetSubBitmap(rect) ); - dc.DrawText( _T("GetSubBitmap()"), 280, 190 ); - dc.DrawBitmap( sub, 280, 210 ); + dc.DrawText( _T("GetSubBitmap()"), 280, 175 ); + dc.DrawBitmap( sub, 280, 195 ); } dc.DrawText( _T("JPEG handler"), 30, 365 ); @@ -697,7 +749,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.DrawText( _T("PNM handler"), 30, 1285 ); if (my_horse_pnm && my_horse_pnm->Ok()) dc.DrawBitmap( *my_horse_pnm, 30, 1300 ); - + dc.DrawText( _T("PNM handler (ascii grey)"), 280, 1285 ); if (my_horse_asciigrey_pnm && my_horse_asciigrey_pnm->Ok()) dc.DrawBitmap( *my_horse_asciigrey_pnm, 280, 1300 ); @@ -714,6 +766,25 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) if (my_horse_xpm && my_horse_xpm->Ok()) dc.DrawBitmap( *my_horse_xpm, 30, 1760 ); + { + int x = 200, y = 300, yy = 170;; + + dc.DrawText(wxT("Original toucan"), x+50, y); + dc.DrawBitmap(my_toucan, x, y+15); + y += yy; + dc.DrawText(wxT("Flipped horizontally"), x+50, y); + dc.DrawBitmap(my_toucan_flipped_horiz, x, y+15); + y += yy; + dc.DrawText(wxT("Flipped vertically"), x+50, y); + dc.DrawBitmap(my_toucan_flipped_vert, x, y+15); + y += yy; + dc.DrawText(wxT("Flipped both h&v"), x+50, y); + dc.DrawBitmap(my_toucan_flipped_both, x, y+15); + + y += yy; + dc.DrawText(wxT("Toucan's head"), x+50, y); + dc.DrawBitmap(my_toucan_head, x, y+15); + } if (my_smile_xbm && my_smile_xbm->Ok()) { @@ -843,6 +914,14 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) { dc.DrawBitmap( my_horse_ani[i], 230 + i * 2 * my_horse_ani[i].GetWidth() , 2420, true ); } +#if wxUSE_LIBJPEG + if (colorized_horse_jpeg) + { + dc.DrawText( _T("Colorize image by rotating green hue to red"), 30, 2490 ); + dc.DrawBitmap( *colorized_horse_jpeg, 30, 2520 ); + } +#endif // wxUSE_LIBJPEG + } void MyCanvas::CreateAntiAliasedBitmap() @@ -857,12 +936,12 @@ void MyCanvas::CreateAntiAliasedBitmap() dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL) ); dc.SetTextForeground( wxT("RED") ); - dc.DrawText( _T("This is anti-aliased Text."), 20, 20 ); - dc.DrawText( _T("And a Rectangle."), 20, 60 ); + dc.DrawText( _T("This is anti-aliased Text."), 20, 5 ); + dc.DrawText( _T("And a Rectangle."), 20, 45 ); dc.SetBrush( *wxRED_BRUSH ); dc.SetPen( *wxTRANSPARENT_PEN ); - dc.DrawRoundedRectangle( 20, 100, 200, 180, 20 ); + dc.DrawRoundedRectangle( 20, 85, 200, 180, 20 ); wxImage original= bitmap.ConvertToImage(); wxImage anti( 150, 150 ); @@ -955,8 +1034,8 @@ MyFrame::MyFrame() m_canvas = new MyCanvas( this, wxID_ANY, wxPoint(0,0), wxSize(10,10) ); - // 500 width * 2500 height - m_canvas->SetScrollbars( 10, 10, 50, 250 ); + // 500 width * 2750 height + m_canvas->SetScrollbars( 10, 10, 50, 275 ); } void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) ) @@ -973,6 +1052,7 @@ void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) ) void MyFrame::OnNewFrame( wxCommandEvent &WXUNUSED(event) ) { +#if wxUSE_FILEDLG wxString filename = wxFileSelector(_T("Select image file")); if ( !filename ) return; @@ -986,6 +1066,7 @@ void MyFrame::OnNewFrame( wxCommandEvent &WXUNUSED(event) ) } (new MyImageFrame(this, wxBitmap(image)))->Show(); +#endif // wxUSE_FILEDLG } #ifdef wxHAVE_RAW_BITMAP @@ -1077,4 +1158,3 @@ bool MyApp::OnInit() return true; } -