C# AutoCAD 截取屏幕

选择图纸中两点,截取屏幕保存为图片。

 [CommandMethod("CaptureScreenRegion")]
 public static void CaptureScreenRegion()
 {            
     var editor = Application.DocumentManager.MdiActiveDocument.Editor;

     /* 1. 获取屏幕第1点 */
     var r1 = editor.GetPoint("\n选择第1点");
     if (r1.Status != PromptStatus.OK)
         return;
     /* 1.1 转为屏幕坐标 */
     var pt1 = ClientToScreen(r1.Value);

     /* 2. 获取屏幕第2点 */
     var r2 = editor.GetPoint("\n选择第2点");
     if (r2.Status != PromptStatus.OK)
         return;

     /* 2.1 转为屏幕坐标 */
     var pt2 = ClientToScreen(r2.Value);

     /* 3.计算长度宽度 */
     int x = 200, y = 200, width = 200, height = 200;

     width  = Math.Abs(pt1.X - pt2.X); // 绝对值
     height = Math.Abs(pt1.Y - pt2.Y); // 绝对值

     x = Math.Min(pt1.X , pt2.X); 
     y = Math.Min(pt1.Y, pt2.Y);

     /* 4.创建一个与屏幕大小相同的 Bitmap */
     using (Bitmap bitmap = new Bitmap(width, height))
     {
         using (Graphics g = Graphics.FromImage(bitmap))  // 使用 Graphics 从屏幕中截取
         {
             // 将屏幕区域 (x, y) 开始,宽度和高度为 (width, height) 的区域复制到 bitmap
             g.CopyFromScreen(x, y, 0, 0, new Size(width, height));
         }
         // 将截屏图像保存为 PNG 文件
         bitmap.Save($@"D:\Png\{Guid.NewGuid()}.Png", ImageFormat.Png);
     }
     
 }
 private static Point ClientToScreen(Point3d point3d)
 {
     var document = Application.DocumentManager.MdiActiveDocument;            
     var wcsPoint = point3d.TransformBy(document.Editor.CurrentUserCoordinateSystem);

     var hWnd = document.Window.Handle;
     var vp = (short)Application.GetSystemVariable("CVPORT");
     System.Windows.Point wdPt = document.Editor.PointToScreen(wcsPoint, vp);
     var scale = Graphics.FromHwnd(IntPtr.Zero).DpiX / 96.0f;
     var drawingPt = new System.Drawing.Point(Convert.ToInt32(wdPt.X * scale), Convert.ToInt32(wdPt.Y * scale));

     ClientToScreen(hWnd, ref drawingPt);
     return drawingPt;
 }

 [DllImport("user32.dll")]
 public static extern bool ClientToScreen(IntPtr hWnd, ref System.Drawing.Point pt);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值