ThinkGeo.com    |     Documentation    |     Premium Support

MapEngine to indexed png

 


I’m working on saving a mapEngine as an indexed png file. I can draw the MapEngine to a bmp and then save as a png, but it is not indexed. I’ve tried different PixelFormats when I instantiate the BitMap, but with an indexed PixelFormat I get this error on the DrawStaticLayersCommand : “Error - A Graphics object cannot be created from an image that has an indexed pixel format.”
 
Here is my code. NexradMap is a mapEngine. Any ideas on how to draw the MapEngine to an indexed PNG?
 

Bitmap newBMP = new Bitmap(320, 200, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
NexradMap.OpenAllLayers();
NexradMap.DrawStaticLayers(newBMP, GeographyUnit.DecimalDegree);
NexradMap.CloseAllLayers();
// Testing - write to file 
newBMP.Save(@"c:\Temp\Nexrad.png", System.Drawing.Imaging.ImageFormat.Png);


Ed,


We did some research on this problem and found that the reason is we cannot create Graphics object from Bitmap which PixelFormat is indexed format.
 
Please take a look at the following MSDN documentation for this.
msdn.microsoft.com/en-us/lib...image.aspx
 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale

I found a work around for this problem.



Bitmap newBMP = new Bitmap(320, 200); 
NexradMap.OpenAllLayers(); 
NexradMap.DrawStaticLayers(newBMP, GeographyUnit.DecimalDegree); NexradMap.CloseAllLayers(); 
// Convert bitmap to indexed bitmap 
Bitmap bmpToPng = new Bitmap(320, 200, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
Image conversion = Image2Indexed8bpp(newBMP); bmpToPng = (Bitmap)conversion; 
// save converted bitmap 
bmpToPng.Save(@"c:\Temp\NexradIndexed.png", System.Drawing.Imaging.ImageFormat.Png); 

public static Image Image2Indexed8bpp(Bitmap bmp) 

System.IO.MemoryStream buffer = new System.IO.MemoryStream(); 
bmp.Save(buffer, System.Drawing.Imaging.ImageFormat.Gif); 
buffer.Seek(0, System.IO.SeekOrigin.Begin); 
return Bitmap.FromStream(buffer); 



Ed, 
  
 It works great, thanks for your sharing. 
  
 Any more questions please just feel free to let me know. 
  
 Thanks. 
  
 Yale