从窗口内容(无边框)截取屏幕截图

时间:2014-04-20 21:05:54

标签: c#

我正在搜索有关如何使用C#在位图中保存表单内容的解决方案。 我已经尝试使用DrawToBitmap,但它捕获了带边框的所有窗口。

这是此代码的结果:

public static Bitmap TakeDialogScreenshot(Form window)
 {
    var b = new Bitmap(window.Bounds.X, window.Bounds.Y);
    window.DrawToBitmap(b, window.Bounds);
    return b;
 }   

通话是:

TakeDialogScreenshot(this);

谁想到了:D

我已经在google上搜索了,但我没有设法得到它。谢谢!

1 个答案:

答案 0 :(得分:5)

修改:虽然使用ClientArea是关键,但还不够,因为DrawToBitmap将始终包含标题,边框,滚动条..

所以在拍完整个屏幕之后 - 或者更确切地说'formhot',我们将不得不裁剪它,使用我们可以从客户区域的原点映射到屏幕坐标并从表格位置减去这些偏移来获得的偏移量。已经在屏幕坐标..:

public static Bitmap TakeDialogScreenshot(Form window)
{
   var b = new Bitmap(window.Width, window.Height);
   window.DrawToBitmap(b, new Rectangle(0, 0, window.Width, window.Height));

   Point p = window.PointToScreen(Point.Empty);

   Bitmap target = new Bitmap( window.ClientSize.Width, window.ClientSize.Height);
   using (Graphics g = Graphics.FromImage(target))
   {
     g.DrawImage(b, 0, 0,
                 new Rectangle(p.X - window.Location.X, p.Y - window.Location.Y, 
                               target.Width, target.Height),  
                GraphicsUnit.Pixel);
   }
   b.Dispose();
   return target;
}

很抱歉我的第一篇文章中出现了错误!