要解决C#截取当前程序窗口指定位置截图的问题,我们可以使用以下方法进行实现。
方法一:使用Win32 API实现
1.引用System.Runtime.InteropServices命名空间。
2.定义下面的结构体和函数:
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hWnd, out Rect rect);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
3.获取当前活动窗口的句柄和窗口矩形:
IntPtr hWnd = GetForegroundWindow();
Rect rect;
GetWindowRect(hWnd, out rect);
4.将窗口矩形转换为屏幕坐标系:
rect.Right -= rect.Left;
rect.Bottom -= rect.Top;
rect.Left = rect.Top = 0;
5.创建一个位图对象并将其大小设置为窗口矩形的大小:
Bitmap bmp = new Bitmap(rect.Right, rect.Bottom, PixelFormat.Format32bppArgb);
6.将窗口的图像绘制到位图上:
using (Graphics gfxBmp = Graphics.FromImage(bmp))
{
IntPtr hdcBitmap = gfxBmp.GetHdc();
bool succeeded = PrintWindow(hWnd, hdcBitmap, 0);
gfxBmp.ReleaseHdc(hdcBitmap);
if (!succeeded)
{
gfxBmp.FillRectangle(new SolidBrush(Color.Gray), new Rectangle(Point.Empty, bmp.Size));
}
}
7.保存位图到本地文件:
bmp.Save("screenshot.bmp", ImageFormat.Bmp);
方法二:使用Windows Forms实现
1.创建一个Windows Forms应用程序。
2.设计一个窗口,包含一个PictureBox控件和一个Button控件。
3.将PictureBox控件的SizeMode属性设置为Zoom,以便在窗口缩放时自动缩放图像。
4.在Button控件的Click事件中添加以下代码:
Rectangle bounds = this.Bounds;
Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(bounds.Location, Point.Empty, bounds.Size);
pictureBox1.Image = bmp;
此代码以窗口的大小为基础创建了一个位图对象,并使用CopyFromScreen方法将整个窗口的图像复制到位图上。最后,将位图赋值给PictureBox的Image属性以显示截图。
5.运行程序,并点击Button控件以进行截图。
两种方法均可实现C#截取当前程序窗口指定位置截图的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决C# 截取当前程序窗口指定位置截图的实现方法 - Python技术站