ThinkGeo.com    |     Documentation    |     Premium Support

Saving a wpfMap on vector format .emf

I am trying to save my wpfMap into vector format. The file saves properly but when I open it in MS word etc, I can see that it is not in vector format. Please see my code below.


Bitmap myBitmap;

                    myBitmap = wpfMap1.GetBitmap(Convert.ToInt32(wpfMap1.ActualWidth), Convert.ToInt32(wpfMap1.ActualHeight));

                    myBitmap.Save(@filePath, System.Drawing.Imaging.ImageFormat.Emf);



Bimal, 
  
   As you found this is not going to work as you think.  The reason is that the GetBitmap returns a raster bitmap which has no vector qualities.  When you then save this to a EMF file you are just creating a vector image with a bitmap embedded in it.  To really get a true EMF image you would need to create a custom GeoCanvas and then inside the GeoCanvas have the kernel of it a graphics object that would then be saved to EMF directly.  This is exactly the kind of thing we do for the PrinterGeoCavnas, and the PdfGeoCanvas.  I will see if we can get a resource to create a sample for EMF. 
  
 David

Thans David, any sample code to do this will be great. I did find this link but am having some issues.floris.briolas.nl/floris/2009/08/c-saving-as-emf/ 


 Bimal,


We created GraphicsGeoCavas in the latest version (6.0.108.0 or later) with which you can use following code to draw layers to an emf file. Please have a try. 



 ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"../../sampledata/data/countries02.shp");
            layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
            layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Country1("CNTRY_NAME");
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            layer.Open();

            Metafile file1 = new Metafile(@"C:\result1.emf", Graphics.FromImage(new Bitmap(1, 1)).GetHdc());
            Graphics g1 = Graphics.FromImage(file1);
            GraphicsGeoCanvas graphicsGeoCanvas = new GraphicsGeoCanvas();
            graphicsGeoCanvas.Width = 400;
            graphicsGeoCanvas.Height = 400;
            graphicsGeoCanvas.BeginDrawing(g1, new RectangleShape(-180, 90, 180, -90), GeographyUnit.DecimalDegree);
            layer.Draw(graphicsGeoCanvas, new Collection<SimpleCandidate>());
            graphicsGeoCanvas.EndDrawing();

Ben



Thanks, I will try and let you know.



I can see the reference now. Thanks



Hello Bimal, 
  
 I’m glad it’s working, please feel free to let us know your problem. 
  
 Regards, 
  
 Gary

Hi, 

I can see this feature and it works on the development build but I downloaded the latest production build today and the feature is not there.


Also, the X and Y position points for pie charts discussed in the link below is also not in the latest 109 build.


gis.thinkgeo.com/Support/Dis...fault.aspx 



Hello Bimal, 
  
 Sorry for the inconvenience, sometimes we are not synchronize this two version in same time, we will left some time to make the enough test to make sure the changes is ok, then synchronize to the production server. 
  
 I have contact product team, so they will make the change to the production version too, please have a try the day after tomorrow. 
  
 Regards, 
  
 Gary

Hello Bimal, 
  
 Sorry I make a mistake yesterday, the GraphicsGeoCavas is a new feature, and usually we don’t add new Features to the production branch to avoid bringing new bugs, so I’m afraid you can’t get it from production version. 
  
 But we are considering take this out of the core and create a code community project for it, we will let you know if we did it. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 I’ve downloaded the Daily development build today (version 6.0.122.0) but I can’t see this new object GraphicsGeoCanvas? Or is this only in the WPF edition? 
  
 Thanks! 
  


 Hello Elm,


 
 For the GraphicsGeoCavas, we just made a sample for this, in this sample, it including the GraphicsGeoCavas source code, so you can use it in any place not only in special product, we think this is the best way for now.
 
 Please check the link below:
 
 wiki.thinkgeo.com/wiki/Map_S...sGeoCanvas
 
 Regards,
 
 Gary