ThinkGeo.com    |     Documentation    |     Premium Support

Getting a Bitmap of the map

I’m trying to get a bitmap of the map after all the layers have been drawn.  I can call WpfMap.GetBitmap to return a bitmap, but I am having problems when I try to automate the process.  When I call it in the event handler for OverlaysDrawn, I don’t always get a complete map image.  Sometimes it is blank and sometimes there a tiles missing.  It’s like the event gets fired before everything is drawn to the screen.



Am I using these calls correctly, or is there a better way to do this?  



I looked at this post, but it seems that I would have to write more code to handle any changes to the map (extent changes, new layers, etc.).  Using this method, I tried calling it in the OverlaysDrawn event handler, but the code was throwing exceptions (InvalidOperation, NullReference) when I try to pan/zoom the map.  I believe it was because of a threading issue.

Hi Justin,



Welcome to Map Suite Forums!



I think it is because the Wpf Edition uses the multi-thread to draw the map in order to improve the performance. So, even we call the GetBitmap or using OverlaysDrawn after the refresh or sleep some time, the map still may not be drawn totally. In order to make sure all the overlays have been drawn, we need to do more works.



For your case, I created a sample to get a bitmap in programmatic way. Please check it and let us know if any questions.

Any questions, don’t hesitate to let us know and have a good journal with map suite!



Thanks,

Troy




001_DisplayASimpleMapForWPF.zip (1.5 MB)

Thanks, I started going down the path of using a DispatchTimer, but I wasn’t sure when to check for the file draw progress.  This answers the question.

Hi Justin,



Okay, good to hear it helps. The codes looks a bit complex but still works anyway. :)

Please let us know if any other questions.



Thanks,

Troy