ThinkGeo.com    |     Documentation    |     Premium Support

Save Map as high resolution image

Hello again community.



I’m trying to save the map as a high resolution image. I’m able to save the map as a regular image, and that works great. But now I need to save that as size A1 (3508 x 4967). The following method does not work, since it will create an image like the one I’m attaching. Basically, saves the current extent of the map and fills the rest of the bitmap with black.


Bitmap auxBitmap = winformsMap1.GetBitmap(4967, 3508);
auxBitmap.Save(saveFileDialog.FileName, saveFormat);

Is there any way to accomplish this? Time is a factor here since I’m already late on a deadline.







Thanks!



Juan.

Hi Juan,



Please try the below codes:


Bitmap bitmap = new Bitmap(4967, 3508);
            MapEngine mapEngine = new MapEngine();
            mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(winformsMap1.CurrentExtent, bitmap.Width, bitmap.Height);
            mapEngine.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);
            mapEngine.StaticLayers.Add("WorldMapKitLayer", new WorldMapKitLayer());
            mapEngine.OpenAllLayers();
            mapEngine.DrawStaticLayers(bitmap, GeographyUnit.DecimalDegree);
            mapEngine.CloseAllLayers();
 
            bitmap.Save("d:\1.png");

Please let us know if any questions.



Thanks,



Troy

Hi Troy,



The code you provided partially worked. 



I get the high resolution image with all the layers in my map. But I also have 2 SimpleMarkersOverlay in my map. I don’t see a way to add those to the MapEngine. Is there any method to accomplish this?



Here is a sample of a regular size image using winformsMap1.GetBitmap(winformsMap1.Width, winformsMap1.Height) and another using your code.



Thanks!



Juan.



 winformsMap1.GetBitmap





your code












Hi Juan, 
  
 I am sorry, the code from Troy is mainly work for service edition, but the marker related overlay is contained in Desktop Edition, it cannot be drawn follow this way. 
  
 I think we should work for it follow these two ways: 
  
 1. Draw the markers in InmemoryFeatureLayer or some other layers contained in Core, then use the code from Troy to draw it. 
 2. You still get the image follow your original way, then resize it to suitable your size, but I think the precision of image will be bad. 
  
 Regards, 
  
 Don

Hi Don, 



Could you please help me accomplish #1 of your tasks list? I don’t know how to draw the markers (that might have many different images) to a layer of the Core.



Thanks for the help.



Juan.

Hi Juan,



Some similar codes are as followings:


InMemoryFeatureLayer markerLayer = new InMemoryFeatureLayer();
            markerLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(new GeoImage("…/…/Images/point.png"));
            markerLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
            SimpleMarkerOverlay simpleMarkerOverlay = new SimpleMarkerOverlay();
            markerLayer.FeatureSource.BeginTransaction();
            foreach (Marker item in simpleMarkerOverlay.Markers)
            {
                markerLayer.InternalFeatures.Add(new Feature(item.Position));
            }
            markerLayer.FeatureSource.CommitTransaction();

But you mentioned you have different images for a layer, then we can choose other styles settings like classbreakstyle, value style, etc to decide how to choose difference images for each feature/marker.



Any questions, please feel free to let us know.



Thanks,



Troy 

Hi Troy, thanks for the reply. That helps, but I DO need to be able to set many different images for the Markers.



If you look at the image in the bottom of the post, you’ll see an example of what I’m trying to save. Those squares with numbers and the other images are markers. I need to be able to save a variety of images, so I need to have the same flexibility the markers have. 



How can we do that?



Thanks!



Hi Juan,



You can use the value style to meet your case, the difference column value can be config the difference image/marker. Here is a sample, please check it. Even the sample is built for service edition, the codes would be the same on the layer definition. 

 wiki.thinkgeo.com/wiki/Map_Suite_Web_Edition_All_Samples#ValueStyle_with_Countries



Please let us know if any questions.



Thanks,



Troy

Troy,  
  
 since I only have a few different images and this is NOT something I need to be concerned performance-wise, I was able to complete this task with the example in your post from 7/6. 
  
 Thanks a lot! 
  
 Juan.

Juan, 
  
 Ok, if any other questions, don’t hesitate to let us know. 
  
 Thanks, 
  
 Troy