I created a WPF application using the Bing maps WPF control. I would like to be able to screenshot only the Bing maps control.
Is use this code to make the screenshot:
// Store the size of the map control
int Width = (int)MyMap.RenderSize.Width;
int Height = (int)MyMap.RenderSize.Height;
System.Windows.Point relativePoint = MyMap.TransformToAncestor(Application.Current.MainWindow).Transform(new System.Windows.Point(0, 0));
int X = (int)relativePoint.X;
int Y = (int)relativePoint.Y;
Bitmap Screenshot = new Bitmap(Width, Height);
Graphics G = Graphics.FromImage(Screenshot);
// snip wanted area
G.CopyFromScreen(X, Y, 0, 0, new System.Drawing.Size(Width, Height), CopyPixelOperation.SourceCopy);
string fileName = "C:\\myCapture.bmp";
System.IO.FileStream fs = System.IO.File.Open(fileName, System.IO.FileMode.OpenOrCreate);
Screenshot.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
fs.Close();
My problem:
The Width
and Height
appear to be bad (false values).
The screenshot produced appear to use bad coordinates.
My screenshot:
What I expect:
Why do I get this result? I tried in Release mode, and without Visual Studio, result is the same.
A screenshot is a shot of the screen... everything on the screen. What you want is to save an image from a single
UIElement
and you can do that using theRenderTargetBitmap.Render
Method. This method takes aVisual
input parameter and luckily, that is one of the base classes for allUIElement
s. So assuming that you want to save a .png file, you could do this: