You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何捕获窗口截图?我的C#窗口截图代码生成空白图片

窗口截图生成空图片的问题排查与解决

我看到你遇到了窗口截图生成空图的问题,而且已经确认窗口句柄和GetWindowRect功能正常,那咱们直接揪出代码里的关键错误:

你的CopyFromScreen调用参数写错了!看这一行:

gfxScreenshot.CopyFromScreen(window.Left, window.Right, 0, 0, size, CopyPixelOperation.SourceCopy);

CopyFromScreen的第二个参数是源区域的左上角Y坐标,但你传成了window.Right(窗口的右边界X坐标),这就导致截图的起始Y位置远远超出了窗口的实际范围,自然截不到任何内容,最终生成空图片。

修正后的代码

把第二个参数改成window.Top就可以正常截图了,优化后的ScreenShotWindow方法如下:

public static void ScreenShotWindow(IntPtr whandle)
{
    // 获取窗口矩形区域
    Rect window = new Rect();
    GetWindowRect(whandle, ref window);

    // 计算窗口尺寸
    int width = window.Right - window.Left;
    int height = window.Bottom - window.Top;
    Size size = new Size(width, height); // 简化尺寸初始化写法

    // 创建对应尺寸的位图
    var bmpScreenshot = new Bitmap(width, height, PixelFormat.Format32bppArgb);

    // 从位图创建绘图对象
    var gfxScreenshot = Graphics.FromImage(bmpScreenshot);

    // 修正:第二个参数改为窗口的Top坐标
    gfxScreenshot.CopyFromScreen(window.Left, window.Top, 0, 0, size, CopyPixelOperation.SourceCopy);

    // 保存截图到指定路径
    bmpScreenshot.Save("Screenshot.png", ImageFormat.Png);
}

额外注意事项

  • 确保目标窗口没有被最小化,最小化状态下的窗口无法通过这种方式捕获截图
  • 如果程序运行在高DPI(如125%/150%缩放)系统上,建议在项目中启用DPI感知,避免截图出现偏移或模糊问题,可以通过添加应用程序清单来配置

内容的提问来源于stack exchange,提问作者kuhi

火山引擎 最新活动