bool wxSVGBitmapFileHandler::ProcessBitmap(const wxBitmap& bmp, wxCoord x, wxCoord y, wxOutputStream& stream) const { static int sub_images = 0; if ( wxImage::FindHandler(wxBITMAP_TYPE_PNG) == NULL ) wxImage::AddHandler(new wxPNGHandler); // find a suitable file name wxString sPNG; do { sPNG = wxString::Format("image%d.png", sub_images++); } while (wxFile::Exists(sPNG)); if ( !bmp.SaveFile(sPNG, wxBITMAP_TYPE_PNG) ) return false; // reference the bitmap from the SVG doc using only filename & ext sPNG = sPNG.AfterLast(wxFileName::GetPathSeparator()); // reference the bitmap from the SVG doc wxString s; s += wxString::Format(" <image x=\"%d\" y=\"%d\" " "width=\"%dpx\" height=\"%dpx\" " "title=\"Image from wxSVG\"\n", x, y, bmp.GetWidth(), bmp.GetHeight()); s += wxString::Format(" xlink:href=\"%s\">\n</image>\n", sPNG); // write to the SVG file const wxCharBuffer buf = s.utf8_str(); stream.Write(buf, strlen((const char *)buf)); return stream.IsOk(); }