private void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e) { SimpleMarkerOverlay markerOverlay = (SimpleMarkerOverlay)winformsMap1.Overlays["MarkerOverlay"]; Marker marker = new Marker(e.WorldLocation); marker.Image = RotateImage(Properties.Resources.AQUA,30); //marker.Image = Properties.Resources.AQUA; //marker.Width = 20; //marker.Height = 34; marker.YOffset = -17; markerOverlay.Markers.Add(marker); winformsMap1.Refresh(); } public static System.Drawing.Image RotateImage(System.Drawing.Image img, float rotationAngle) { //TODO: we can do more, actually, it is not a square image after the rotation. double newWidth = Math.Ceiling(Math.Sqrt(Math.Pow(img.Width, 2) + Math.Pow(img.Height, 2))); //create an empty Bitmap image Bitmap bmp = new Bitmap((int)newWidth, (int)newWidth); //turn the Bitmap into a Graphics object Graphics gfx = Graphics.FromImage(bmp); //now we set the rotation point to the center of our image gfx.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2); //now rotate the image gfx.RotateTransform(rotationAngle); //set the InterpolationMode to HighQualityBicubic so to ensure a high //quality image once it is transformed to the specified size gfx.InterpolationMode = InterpolationMode.HighQualityBilinear; //now draw our new image onto the graphics object gfx.DrawImageUnscaled(img, new Point((int)(-img.Width * 0.5), (int)(-img.Height * 0.5))); gfx.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2); //dispose of our Graphics object gfx.Dispose(); //return the image return bmp; }