gpt4 book ai didi

c# - 如何截取WPF控件的屏幕截图?

转载 作者:IT王子 更新时间:2023-10-29 04:21:05 26 4
gpt4 key购买 nike

我使用必应 map WPF 控件创建了一个 WPF 应用程序。我希望能够仅对 Bing 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();

我的问题:

WidthHeight 似乎不正确(错误值)。生成的屏幕截图似乎使用了错误的坐标。

我的截图:

My screenshot

我的期望:

Desired screenshot

为什么我会得到这个结果?我在 Release模式下尝试过,在没有 Visual Studio 的情况下,结果是一样的。

最佳答案

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

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);
}

关于c# - 如何截取WPF控件的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24466482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com