ThinkGeo.com    |     Documentation    |     Premium Support

MapPrinterLayer rotation

Is it possible to rotate a MapPrinterLayer 90 degrees?  We are building a printout of selected areas and when the user selects an area that is taller than it is wide, we want to have the image rotated so North is facing to the right instead of pointing to the top of the page.  Attached is an example of the mapprinterlayer being built with the selected area, but north is still facing the top.  I want this to rotate 90 degrees if possible.





Hi Jake, 
  
 I’m confused with your requirement, as you said, you want print the map with rotation. The map can’t be rotated, but you can get the map’s bitmap and rotate the bitmap with following statements: 
  
             int w = (int)(Math.Max(Math.Abs(imageWidth * cos - imageHeight * sin), Math.Abs(imageWidth * cos + imageHeight * sin))); 
             int h = (int)(Math.Max(Math.Abs(imageWidth * sin - imageHeight * cos), Math.Abs(imageWidth * sin + imageHeight * cos))); 
             using (Bitmap rotatedBmp = new Bitmap(w, h)) 
             { 
  
                 //make a graphics object from the empty bitmap 
                 Graphics g = Graphics.FromImage(rotatedBmp); 
                 Point offset = new Point((imageWidth - w) / 2, (imageHeight - h) / 2); 
  
                 g.TranslateTransform((float)geoImage.GetWidth() / 2 + (float)(w - imageWidth) / 2, (float)geoImage.GetHeight() / 2 + (float)(h - imageHeight) / 2); 
  
                 //rotate the image 
                 g.RotateTransform(angle); 
  
                 //move the image back 
                 g.TranslateTransform(-(float)w / 2, -(float)h / 2); 
  
                 GdiPlusGeoCanvas canvas = new GdiPlusGeoCanvas(); 
                 using (Stream stream = geoImage.GetImageStream(canvas)) 
                 { 
                     g.DrawImage(Image.FromStream(stream), new PointF(-offset.X, -offset.Y)); 
                 } 
                 g.ResetTransform(); 
                 g.Save(); 
                 g.Dispose(); 
  
                 MemoryStream memoryStream = new MemoryStream(); 
                 rotatedBmp.Save(memoryStream, ImageFormat.Png); 
                 return new GeoImage(memoryStream); 
             } 
  
 If you want to print a map with Portrait order, you can set “Orientation” property to “Portrait”. 
  
 Thanks,