public static void ExportToCollections(List <ViewNode> nodes, string path) { string name = Path.GetFileNameWithoutExtension(path); // 目标文件的名称,不含扩展名 string tempDir = Path.Combine(MyCache.ProjTempCollFolder, name); // 收藏文件临时目录 /* 清空临时目录 */ FileHelper.DeleteFolder(tempDir); Directory.CreateDirectory(tempDir); PageNode pageNode = ViewNode.GetPageNodeFromParent(nodes[0]); int width = pageNode.Size.Width; int height = pageNode.Size.Height; /* 在控件的原始位置绘制 */ Bitmap bm = new Bitmap(width, height); Graphics g = Graphics.FromImage(bm); foreach (ViewNode node in nodes) { node.DrawAt(g, 1.0f, true); // 绘制控件 } Rectangle rect = ViewNode.GetMinimumCommonRectangleInPage(nodes); int newWidth = rect.Width; int newHeight = rect.Height; int Side = newWidth > newHeight ? newWidth : newHeight; Side += 10; Bitmap img = new Bitmap(Side, Side); Graphics graphics = Graphics.FromImage(img); graphics.DrawImage(bm, (Side - newWidth) / 2, (Side - newHeight) / 2, rect, GraphicsUnit.Pixel); /* 保存预览图片 */ string preview = Path.Combine(tempDir, MyConst.TemplatePreviewFile); // 模板预览图片 ImageHelper.SaveImageAsPNG(img, preview); /* 创建图片资源临时存放目录 */ string tempImgDir = Path.Combine(tempDir, MyConst.ImgFolder); Directory.CreateDirectory(tempImgDir); /* 创建模板的界面元文件,并导出图片资源 */ TemplateMeta template = new TemplateMeta(); foreach (ViewNode node in nodes) { /* 添加控件到界面元文件 */ KNXView knx = EntityHelper.ExportViewNode(null, node, tempImgDir, rect.Location); template.Views.Add(knx); } /* 保存界面元文件 */ string metaFile = Path.Combine(tempDir, MyConst.TemplateMetaFile); // 界面元文件 AppStorage.SaveAsFile(template, metaFile); // 保存模板文件 VersionStorage.SaveTemplateVersionFile(Path.Combine(tempDir, MyConst.TemplateVersion)); // 保存模板文件的版本信息。 ZipHelper.ZipDir(tempDir, path); // 压缩为最终的收藏文件 }