X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ab0f03868e5fcc9d5a9dfe9573cc11d73ea7fb20..b6e5eaa59701315ca06996ff845872ca4122695f:/samples/image/image.cpp diff --git a/samples/image/image.cpp b/samples/image/image.cpp index 7898661a03..625b8dc375 100644 --- a/samples/image/image.cpp +++ b/samples/image/image.cpp @@ -20,10 +20,13 @@ #include "wx/image.h" #include "wx/file.h" +#include "wx/mstream.h" +#include "wx/wfstream.h" #include "smile.xbm" #include "smile.xpm" + // derived classes class MyFrame; @@ -47,6 +50,8 @@ public: wxBitmap *my_horse_pcx; wxBitmap *my_horse_pnm; wxBitmap *my_horse_tiff; + wxBitmap *my_horse_xpm; + wxBitmap *my_smile_xbm; wxBitmap *my_square; wxBitmap *my_anti; @@ -84,7 +89,7 @@ public: MyImageFrame(wxFrame *parent, const wxBitmap& bitmap) : wxFrame(parent, -1, _T("Frame with image"), wxDefaultPosition, wxDefaultSize, - wxCAPTION), + wxCAPTION | wxSYSTEM_MENU), m_bitmap(bitmap) { SetClientSize(bitmap.GetWidth(), bitmap.GetHeight()); @@ -141,6 +146,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, my_horse_pcx = (wxBitmap*) NULL; my_horse_pnm = (wxBitmap*) NULL; my_horse_tiff = (wxBitmap*) NULL; + my_horse_xpm = (wxBitmap*) NULL; my_smile_xbm = (wxBitmap*) NULL; my_square = (wxBitmap*) NULL; my_anti = (wxBitmap*) NULL; @@ -167,23 +173,23 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, else wxLogWarning("Can't find image files in either '.' or '..'!"); - wxImage image( bitmap ); + wxImage image = bitmap.ConvertToImage(); #if wxUSE_LIBPNG if ( !image.SaveFile( dir + wxString("test.png"), wxBITMAP_TYPE_PNG )) wxLogError("Can't save file"); - + image.Destroy(); image.LoadFile( dir + wxString("test.png") ); - my_square = new wxBitmap( image.ConvertToBitmap() ); - + my_square = new wxBitmap( image ); + image.Destroy(); if ( !image.LoadFile( dir + wxString("horse.png")) ) wxLogError("Can't load PNG image"); else - my_horse_png = new wxBitmap( image.ConvertToBitmap() ); + my_horse_png = new wxBitmap( image ); #endif // wxUSE_LIBPNG #if wxUSE_LIBJPEG @@ -192,7 +198,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.jpg")) ) wxLogError("Can't load JPG image"); else - my_horse_jpeg = new wxBitmap( image.ConvertToBitmap() ); + my_horse_jpeg = new wxBitmap( image ); #endif // wxUSE_LIBJPEG #if wxUSE_GIF @@ -201,7 +207,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.gif")) ) wxLogError("Can't load GIF image"); else - my_horse_gif = new wxBitmap( image.ConvertToBitmap() ); + my_horse_gif = new wxBitmap( image ); #endif #if wxUSE_PCX @@ -210,7 +216,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.pcx"), wxBITMAP_TYPE_PCX ) ) wxLogError("Can't load PCX image"); else - my_horse_pcx = new wxBitmap( image.ConvertToBitmap() ); + my_horse_pcx = new wxBitmap( image ); #endif image.Destroy(); @@ -218,7 +224,19 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.bmp"), wxBITMAP_TYPE_BMP ) ) wxLogError("Can't load BMP image"); else - my_horse_bmp = new wxBitmap( image.ConvertToBitmap() ); + my_horse_bmp = new wxBitmap( image ); + +#if wxUSE_XPM + image.Destroy(); + + if ( !image.LoadFile( dir + wxString("horse.xpm"), wxBITMAP_TYPE_XPM ) ) + wxLogError("Can't load XPM image"); + else + my_horse_xpm = new wxBitmap( image ); + + if ( !image.SaveFile( dir + wxString("test.xpm"), wxBITMAP_TYPE_XPM )) + wxLogError("Can't save file"); +#endif #if wxUSE_PNM image.Destroy(); @@ -226,7 +244,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.pnm"), wxBITMAP_TYPE_PNM ) ) wxLogError("Can't load PNM image"); else - my_horse_pnm = new wxBitmap( image.ConvertToBitmap() ); + my_horse_pnm = new wxBitmap( image ); #endif #if wxUSE_LIBTIFF @@ -235,7 +253,7 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, if ( !image.LoadFile( dir + wxString("horse.tif"), wxBITMAP_TYPE_TIF ) ) wxLogError("Can't load TIFF image"); else - my_horse_tiff = new wxBitmap( image.ConvertToBitmap() ); + my_horse_tiff = new wxBitmap( image ); #endif CreateAntiAliasedBitmap(); @@ -243,13 +261,11 @@ MyCanvas::MyCanvas( wxWindow *parent, wxWindowID id, my_smile_xbm = new wxBitmap( (const char*)smile_bits, smile_width, smile_height, 1 ); -#ifndef __WXGTK__ #if !defined(__WINDOWS__) || wxUSE_XPM_IN_MSW // demonstrates XPM automatically using the mask when saving if ( m_bmpSmileXpm.Ok() ) m_bmpSmileXpm.SaveFile("saved.xpm", wxBITMAP_TYPE_XPM); #endif -#endif } MyCanvas::~MyCanvas() @@ -261,6 +277,7 @@ MyCanvas::~MyCanvas() delete my_horse_bmp; delete my_horse_pcx; delete my_horse_tiff; + delete my_horse_xpm; delete my_smile_xbm; delete my_square; delete my_anti; @@ -318,25 +335,29 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) if (my_horse_tiff && my_horse_tiff->Ok()) dc.DrawBitmap( *my_horse_tiff, 30, 1530 ); + dc.DrawText( "XPM handler", 30, 1745 ); + if (my_horse_xpm && my_horse_xpm->Ok()) + dc.DrawBitmap( *my_horse_xpm, 30, 1760 ); + if (my_smile_xbm && my_smile_xbm->Ok()) { - dc.DrawText( "XBM bitmap", 30, 1745 ); - dc.DrawText( "(green on red)", 30, 1760 ); + dc.DrawText( "XBM bitmap", 30, 1975 ); + dc.DrawText( "(green on red)", 30, 1990 ); dc.SetTextForeground( "GREEN" ); dc.SetTextBackground( "RED" ); - dc.DrawBitmap( *my_smile_xbm, 30, 1780 ); + dc.DrawBitmap( *my_smile_xbm, 30, 2010 ); dc.SetTextForeground( "BLACK" ); - dc.DrawText( "After wxImage conversion", 150, 1745 ); - dc.DrawText( "(red on white)", 150, 1760 ); + dc.DrawText( "After wxImage conversion", 150, 1975 ); + dc.DrawText( "(red on white)", 150, 1990 ); dc.SetTextForeground( "RED" ); - wxImage i( *my_smile_xbm ); + wxImage i = my_smile_xbm->ConvertToImage(); i.SetMaskColour( 255, 255, 255 ); i.Replace( 0, 0, 0, wxRED_PEN->GetColour().Red(), wxRED_PEN->GetColour().Green(), wxRED_PEN->GetColour().Blue() ); - dc.DrawBitmap( i.ConvertToBitmap(), 150, 1780, TRUE ); + dc.DrawBitmap( i.ConvertToBitmap(), 150, 2010, TRUE ); dc.SetTextForeground( "BLACK" ); } @@ -357,36 +378,36 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) if (mono.Ok()) { - dc.DrawText( "Mono bitmap", 30, 1865 ); - dc.DrawText( "(red on green)", 30, 1880 ); + dc.DrawText( "Mono bitmap", 30, 2095 ); + dc.DrawText( "(red on green)", 30, 2110 ); dc.SetTextForeground( "RED" ); dc.SetTextBackground( "GREEN" ); - dc.DrawBitmap( mono, 30, 1900 ); + dc.DrawBitmap( mono, 30, 2130 ); dc.SetTextForeground( "BLACK" ); - dc.DrawText( "After wxImage conversion", 150, 1865 ); - dc.DrawText( "(red on white)", 150, 1880 ); + dc.DrawText( "After wxImage conversion", 150, 2095 ); + dc.DrawText( "(red on white)", 150, 2110 ); dc.SetTextForeground( "RED" ); - wxImage i( mono ); + wxImage i = mono.ConvertToImage(); i.SetMaskColour( 255,255,255 ); i.Replace( 0,0,0, wxRED_PEN->GetColour().Red(), wxRED_PEN->GetColour().Green(), wxRED_PEN->GetColour().Blue() ); - dc.DrawBitmap( i.ConvertToBitmap(), 150, 1900, TRUE ); + dc.DrawBitmap( i.ConvertToBitmap(), 150, 2130, TRUE ); dc.SetTextForeground( "BLACK" ); } - dc.DrawText("XPM bitmap", 30, 2000); + dc.DrawText("XPM bitmap", 30, 2230); if ( m_bmpSmileXpm.Ok() ) { - dc.DrawBitmap(m_bmpSmileXpm, 30, 2020, TRUE); + dc.DrawBitmap(m_bmpSmileXpm, 30, 2250, TRUE); } - dc.DrawText("XPM icon", 150, 2000); + dc.DrawText("XPM icon", 150, 2230); if ( m_iconSmileXpm.Ok() ) { - dc.DrawIcon(m_iconSmileXpm, 150, 2020); + dc.DrawIcon(m_iconSmileXpm, 150, 2250); } } @@ -409,7 +430,7 @@ void MyCanvas::CreateAntiAliasedBitmap() dc.SetPen( *wxTRANSPARENT_PEN ); dc.DrawRoundedRectangle( 20, 100, 200, 180, 20 ); - wxImage original( bitmap ); + wxImage original= bitmap.ConvertToImage(); wxImage anti( 150, 150 ); /* This is quite slow, but safe. Use wxImage::GetData() for speed instead. */ @@ -458,7 +479,7 @@ MyFrame::MyFrame() wxPoint(20,20), wxSize(470,360) ) { wxMenu *file_menu = new wxMenu(); - file_menu->Append( ID_NEW, "&New frame"); + file_menu->Append( ID_NEW, "&Show image..."); file_menu->AppendSeparator(); file_menu->Append( ID_ABOUT, "&About..."); file_menu->AppendSeparator(); @@ -493,7 +514,19 @@ void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) ) void MyFrame::OnNewFrame( wxCommandEvent &WXUNUSED(event) ) { - (new MyImageFrame(this, *m_canvas->my_horse_bmp))->Show(); + wxString filename = wxFileSelector(_T("Select image file")); + if ( !filename ) + return; + + wxImage image; + if ( !image.LoadFile(filename) ) + { + wxLogError(_T("Couldn't load image from '%s'."), filename.c_str()); + + return; + } + + (new MyImageFrame(this, image.ConvertToBitmap()))->Show(); } //----------------------------------------------------------------------------- @@ -526,6 +559,10 @@ bool MyApp::OnInit() wxImage::AddHandler( new wxPNMHandler ); #endif +#if wxUSE_XPM + wxImage::AddHandler( new wxXPMHandler ); +#endif + wxFrame *frame = new MyFrame(); frame->Show( TRUE );