+wxImage wxImage::GetSubImage( const wxRect &rect ) const
+{
+ wxImage image;
+
+ wxCHECK_MSG( Ok(), image, wxT("invalid image") );
+
+ wxCHECK_MSG( (rect.GetLeft()>=0) && (rect.GetTop()>=0) && (rect.GetRight()<=GetWidth()) && (rect.GetBottom()<=GetHeight())
+ , image, wxT("invalid subimage size") );
+
+ int subwidth=rect.GetWidth();
+ const int subheight=rect.GetHeight();
+
+ image.Create( subwidth, subheight );
+
+ char unsigned *subdata = image.GetData(), *data=GetData();
+
+ wxCHECK_MSG( subdata, image, wxT("unable to create image") );
+
+ if (M_IMGDATA->m_hasMask)
+ image.SetMaskColour( M_IMGDATA->m_maskRed, M_IMGDATA->m_maskGreen, M_IMGDATA->m_maskBlue );
+
+ const int subleft=3*rect.GetLeft();
+ const int width=3*GetWidth();
+ subwidth*=3;
+
+ data+=rect.GetTop()*width+subleft;
+
+ for (long j = 0; j < subheight; ++j)
+ {
+ memcpy( subdata, data, subwidth);
+ subdata+=subwidth;
+ data+=width;
+ }
+
+ return image;
+}
+