ThinkGeo.com    |     Documentation    |     Premium Support

Bitmap problem: Black Square instead of map

Hi,


I created some service (generic handler) to return map image, but instead of map I got 'Black Square'. How can I save image into outputstream? I can cretate another page and send WebRequest to it, but I prefer to have direct way.


Here is my code:


Map Map1 = new Map("WorldMap", 500, 500);

Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));

WorldMapKitWmsWebOverlay worldMapKitOverlay = new WorldMapKitWmsWebOverlay();

Map1.MapUnit = GeographyUnit.DecimalDegree;

Map1.CustomOverlays.Add(worldMapKitOverlay);

Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);

context.Response.ContentType = "image/jpeg";

System.Drawing.Bitmap bmp = Map1.GetBitmap();

bmp.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);  

context.Response.End();

 



How can I create a map programmatically, add several layers and return a map image into output steram? 
  
 Could you please give me an example?

 Igor,


I found two samples may help you.



Current Extent to Bitmap



wiki.thinkgeo.com/wiki/Map_S..._to_Bitmap



Print Preview, it includes the button that export map to bitmap


wiki.thinkgeo.com/wiki/Map_S...ng_Samples


Thanks,


James


 




Thank you James, 



I figured it out. But I still have some problem with 'black background'. Actually, all oceans are black and I have no ocean layer on my map. I also cannot use some background layer as WorldMapKitLayer because it is untransparent and hide all my markers and other layers. 



Maybe it is needed to apply some settings? 



The strange thing is that when I stored this image on my hard disc it looks ok. 



 GeoImage image = GdiPlusGeoCanvas.CreateGeoImage((int)Map1.Width.Value, (int)Map1.Height.Value); GdiPlusGeoCanvas canvas = new GdiPlusGeoCanvas(); canvas.BeginDrawing(image, Map1.CurrentExtent, GeographyUnit.DecimalDegree); foreach (Layer layer in staticOverlay.Layers) { layer.Open(); layer.Draw(canvas, new Collection<simplecandidate>()); layer.Close(); } canvas.EndDrawing(); MemoryStream stream = GdiPlusGeoCanvas.ConvertGeoImageToMemoryStream(image); Bitmap bitmap = new Bitmap(stream); bitmap.Save(@"C:\$$$\Map.jpeg"); context.Response.ContentType = "image/jpeg"; bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); context.Response.End(); 




Igor, 
  
 You export the image to jpeg format, as I know the jpeg format couldn’t support transparent, so that caused the black background, you can set the format to png, or you can fill the back color to specific brush after you can canvas.BeginDrawing(), just like code blew, 
 canvas.Clear(new GeoSolidBrush(GeoColor.StandardColors.Wheat)); 
  
 Thanks, 
 James

Thank you very much James! it works!

Igor, 
  
 You’re welcome. I am glad it’s working with you. 
  
 James