选择图纸中两点,截取屏幕保存为图片。
[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);