]>
git.saurik.com Git - wxWidgets.git/blob - samples/image/image.cpp
4 * Author: Robert Roebling
6 * Copyright: (C) 1998, Robert Roebling
10 // For compilers that support precompilation, includes "wx/wx.h".
11 #include "wx/wxprec.h"
30 class MyCanvas
: public wxScrolledWindow
34 MyCanvas( wxWindow
*parent
, wxWindowID
, const wxPoint
&pos
, const wxSize
&size
);
36 void OnPaint( wxPaintEvent
&event
);
37 void CreateAntiAliasedBitmap();
43 DECLARE_DYNAMIC_CLASS(MyCanvas
)
49 class MyFrame
: public wxFrame
54 void OnAbout( wxCommandEvent
&event
);
55 void OnQuit( wxCommandEvent
&event
);
59 DECLARE_DYNAMIC_CLASS(MyFrame
)
65 class MyApp
: public wxApp
68 virtual bool OnInit();
77 IMPLEMENT_DYNAMIC_CLASS(MyCanvas
, wxScrolledWindow
)
79 BEGIN_EVENT_TABLE(MyCanvas
, wxScrolledWindow
)
80 EVT_PAINT(MyCanvas::OnPaint
)
83 MyCanvas::MyCanvas( wxWindow
*parent
, wxWindowID id
,
84 const wxPoint
&pos
, const wxSize
&size
)
85 : wxScrolledWindow( parent
, id
, pos
, size
, wxSUNKEN_BORDER
)
87 my_horse
= (wxBitmap
*) NULL
;
88 my_square
= (wxBitmap
*) NULL
;
89 my_anti
= (wxBitmap
*) NULL
;
91 SetBackgroundColour(* wxWHITE
);
93 wxBitmap
bitmap( 100, 100 );
96 dc
.SelectObject( bitmap
);
97 dc
.SetBrush( wxBrush( "orange", wxSOLID
) );
98 dc
.SetPen( *wxWHITE_PEN
);
99 dc
.DrawRectangle( 0, 0, 100, 100 );
100 dc
.SelectObject( wxNullBitmap
);
105 dir
= wxString("../");
108 wxImage
image( bitmap
);
109 image
.SaveFile( dir
+ wxString("test.png"), wxBITMAP_TYPE_PNG
);
111 image
.LoadFile( dir
+ wxString("horse.png"), wxBITMAP_TYPE_PNG
);
112 my_horse
= new wxBitmap( image
.ConvertToBitmap() );
114 image
.LoadFile( dir
+ wxString("test.png"), wxBITMAP_TYPE_PNG
);
115 my_square
= new wxBitmap( image
.ConvertToBitmap() );
117 (void)new wxTextCtrl( this, -1, "", wxPoint(10,200), wxSize(120,-1) );
119 CreateAntiAliasedBitmap();
122 MyCanvas::~MyCanvas()
129 void MyCanvas::OnPaint( wxPaintEvent
&WXUNUSED(event
) )
131 wxPaintDC
dc( this );
134 dc
.DrawText( "Loaded image", 30, 10 );
135 if (my_square
&& my_square
->Ok()) dc
.DrawBitmap( *my_square
, 30, 30 );
137 dc
.DrawText( "Drawn directly", 150, 10 );
138 dc
.SetBrush( wxBrush( "orange", wxSOLID
) );
139 dc
.SetPen( *wxWHITE_PEN
);
140 dc
.DrawRectangle( 150, 30, 100, 100 );
142 if (my_anti
&& my_anti
->Ok()) dc
.DrawBitmap( *my_anti
, 250, 140 );
144 if (my_horse
&& my_horse
->Ok()) dc
.DrawBitmap( *my_horse
, 30, 140 );
147 void MyCanvas::CreateAntiAliasedBitmap()
149 wxBitmap
bitmap( 300, 300 );
153 dc
.SelectObject( bitmap
);
157 dc
.SetFont( wxFont( 24, wxDECORATIVE
, wxDEFAULT
, wxDEFAULT
) );
158 dc
.SetTextForeground( "RED" );
159 dc
.DrawText( "This is anti-aliased Text.", 20, 20 );
160 dc
.DrawText( "And a Rectangle.", 20, 60 );
162 dc
.SetBrush( *wxRED_BRUSH
);
163 dc
.DrawRoundedRectangle( 20, 100, 200, 180, 20 );
165 wxImage
original( bitmap
);
166 wxImage
anti( 150, 150 );
168 /* This is quite slow, but safe. Use wxImage::GetData() for speed instead. */
170 for (int y
= 1; y
< 149; y
++)
171 for (int x
= 1; x
< 149; x
++)
173 int red
= original
.GetRed( x
*2, y
*2 ) +
174 original
.GetRed( x
*2-1, y
*2 ) +
175 original
.GetRed( x
*2, y
*2+1 ) +
176 original
.GetRed( x
*2+1, y
*2+1 );
179 int green
= original
.GetGreen( x
*2, y
*2 ) +
180 original
.GetGreen( x
*2-1, y
*2 ) +
181 original
.GetGreen( x
*2, y
*2+1 ) +
182 original
.GetGreen( x
*2+1, y
*2+1 );
185 int blue
= original
.GetBlue( x
*2, y
*2 ) +
186 original
.GetBlue( x
*2-1, y
*2 ) +
187 original
.GetBlue( x
*2, y
*2+1 ) +
188 original
.GetBlue( x
*2+1, y
*2+1 );
190 anti
.SetRGB( x
, y
, red
, green
, blue
);
192 my_anti
= new wxBitmap( anti
.ConvertToBitmap() );
197 const int ID_QUIT
= 108;
198 const int ID_ABOUT
= 109;
200 IMPLEMENT_DYNAMIC_CLASS( MyFrame
, wxFrame
)
202 BEGIN_EVENT_TABLE(MyFrame
,wxFrame
)
203 EVT_MENU (ID_ABOUT
, MyFrame::OnAbout
)
204 EVT_MENU (ID_QUIT
, MyFrame::OnQuit
)
208 : wxFrame( (wxFrame
*)NULL
, -1, "wxImage sample",
209 wxPoint(20,20), wxSize(470,360) )
211 wxMenu
*file_menu
= new wxMenu();
212 file_menu
->Append( ID_ABOUT
, "About..");
213 file_menu
->Append( ID_QUIT
, "Exit");
215 wxMenuBar
*menu_bar
= new wxMenuBar();
216 menu_bar
->Append(file_menu
, "File");
218 SetMenuBar( menu_bar
);
221 int widths
[] = { -1, 100 };
222 SetStatusWidths( 2, widths
);
224 m_canvas
= new MyCanvas( this, -1, wxPoint(0,0), wxSize(10,10) );
225 m_canvas
->SetScrollbars( 10, 10, 50, 50 );
228 void MyFrame::OnQuit( wxCommandEvent
&WXUNUSED(event
) )
233 void MyFrame::OnAbout( wxCommandEvent
&WXUNUSED(event
) )
235 (void)wxMessageBox( "wxImage demo\n"
236 "Robert Roebling (c) 1998",
237 "About wxImage Demo", wxICON_INFORMATION
| wxOK
);
240 //-----------------------------------------------------------------------------
242 //-----------------------------------------------------------------------------
247 wxImage::AddHandler( new wxPNGHandler
);
251 wxImage::AddHandler( new wxJPEGHandler
);
254 wxFrame
*frame
= new MyFrame();