首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何截取WPF控件的屏幕截图?

如何截取WPF控件的屏幕截图?
EN

Stack Overflow用户
提问于 2014-06-28 19:47:40
回答 1查看 25.3K关注 0票数 33

我使用Bing地图WPF控件创建了一个WPF应用程序。我希望能够截图只有兵地图控件。

使用以下代码来制作屏幕截图:

代码语言:javascript
复制
// 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:

WidthHeight似乎是坏的(假的值)。生成的屏幕截图似乎使用了错误的坐标。

我的屏幕截图:

我所期望的:

为什么我会得到这样的结果?我在发布模式下尝试过,没有使用Visual Studio,结果是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 01:03:01

屏幕截图是屏幕的截图...屏幕上的一切。您想要的是保存来自单个UIElement的图像,您可以使用RenderTargetBitmap.Render Method来做到这一点。这个方法接受一个Visual输入参数,幸运的是,它是所有UIElement的基类之一。因此,假设您想要保存一个.png文件,您可以这样做:

代码语言:javascript
复制
RenderTargetBitmap renderTargetBitmap = 
    new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
renderTargetBitmap.Render(yourMapControl); 
PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
using (Stream fileStream = File.Create(filePath))
{
    pngImage.Save(fileStream);
}
票数 63
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24466482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档