我创建了一个使用必应MapWPF控件的WPF应用程序。我希望能够只截图必应Map控件。
我用下面的代码来制作截图:
// 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();
我的问题:
Width
和Height
似乎是错误的(假值)。生成的屏幕截图似乎使用了错误的坐标。
我的屏幕截图:
我的期望:
为什么我会得到这个结果?我在发布模式下尝试过,没有Visual Studio,结果是一样的。
1条答案
按热度按时间8ftvxx2r1#
屏幕截图是屏幕的快照... * 屏幕上的所有内容 *。您需要保存来自单个
UIElement
的图像,您可以使用RenderTargetBitmap.Render
Method来完成此操作。此方法接受Visual
输入参数,幸运的是,它是所有UIElement
的基类之一。因此,假设您要保存一个.png文件,您可以这样做: