找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1927|回复: 2

[分享] sld文件格式的研究

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:32:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
sld文件格式的研究
utoCAD 幻灯片文件是由 MSLIDE 命令写入并由 VSLIDE 命令读取的屏幕图像。 本节介绍幻灯文件的格式,以便于希望在程序中融入幻灯支持的开发人员进行开发。
幻灯文件由标题部分(31 字节)以及一个或多个可变长度的数据记录组成。 写入幻灯文件的所有坐标和大小都基于创建幻灯时显示设备的图形区,点 (0,0) 位于图形区的左下角。 对于 AutoCAD R9 以及更高版本,幻灯文件标题由以下字段组成:
幻灯文件标题

字段
字节
说明

ID 字符串
17
“AutoCAD 幻灯片”CR LF ^Z NUL

类型标识符
1
当前设置为 56(十进制)

层指示器
1
当前设置为 2

高 X 点
2
图形区域的宽度:1,以像素为单位

高 Y 点
2
图形区域的高度:1,以像素为单位

宽高比
4
绘图区域宽高比(以英寸为单位的水平尺寸/竖直尺寸),按 10,000,000 缩放。 通常以低位字节在前的方式写入此数值

硬件填充
2
0 或 2(值不重要)

测试数字
2
一个数字(十六进制值 1234),用于确定是以高阶字节在前的顺序(适用于 Intel 8086 系列 CPU)还是以低阶字节在前的顺序(适用于 Motorola 68000 系列 CPU)写入幻灯片中所有的双字节值
标题后面是数据记录。 每个数据记录的开头为双字节的字段,其高位字节表示记录的类型。 记录的其余部分可由单字节或双字节的字段组成,如下表所述。 要确定双字节字段是以高阶字节在前的顺序还是以低阶字节在前的顺序写入,请查看上表说明的标题的“测试数字”字段。
幻灯文件数据记录

记录类型
(十六进制)

字节

含义

说明

00-7F
8
矢量
普通矢量的 from-X 坐标。 并按照后面是 from-Y、to-X 和 to-Y 坐标的顺序作为双字节值。 from- 点保存为上一点

80-FA
未定义
保留以供将来使用

FB
5
偏移矢量
低阶字节和其后的三个字节根据距保存的上一点的偏移量(-128 到 +127)来指定矢量的端点 (from-X,from-Y,to-X,to-Y)。 将经过调整的 from- 点保存为上一点,以供后续矢量使用

FC
2
文件结尾
低阶字节为 00

FD
6
实体填充
低阶字节始终为零。 后面的两个双字节值指定要进行实体填充的多边形的一个顶点的 X 坐标和 Y 坐标。 会依次出现三到十个这样的记录。 Y 坐标值为负的实体填充记录表示这种填充序列的开始或结束。 在起点记录中,X 坐标指示要跟随的顶点记录的数目

FE
3
常用
端点
矢量
这是一个以上一点作为起点的矢量。 低阶字节和其后的字节根据距保存的上一点的偏移量(-128 到 +127)来指定 to-X 和 to-Y。 将经过调整的 to- 点保存为上一点,以供后续矢量使用

FF
2
新建颜色
使用由低阶字节指示的颜色号绘制后续矢量
只要幻灯片包含矢量,“新建颜色”记录将是第一个数据记录。 幻灯片中矢量的顺序和这些矢量端点的顺序可能会变化。
例如,以下是在安装有 IBM 增强型图形适配器的 IBM PC/AT 上创建的简单幻灯文件的十六进制转储(标有注释)。 幻灯片包含一条从绘图区域左下角到右上角的白色对角线、一条位于左下角附近的绿色垂直线以及一个在左下角处的红色小矩形。
41 75 74 6F 43 41 ID          字符串(“AutoCAD 幻灯片”CR LF ^Z NUL)44 20 53 6C 69 64 65 0D 0A 1A 00 56                            类型标识符 (56)02                            层指示器 (2)3C 02                         高 X 点 (572)24 01                         高 Y 点 (292)0B 80 DF 00                   宽高比 (14,647,307 / 10,000,000 = 1.46)02 00                         硬件填充 (2)34 12                         测试数字 (1234 十六进制)07 FF                         新建颜色(7 = 白色)3C 02 24 01 00 00 00 00       从 572,292 到 0,0 的矢量。 (572,292) 成为“上一个”点3 FF                          新建颜色(3 = 绿色)0F 00 32 00 0F 00 13 00       从 15,50 到 15,19 的矢量。 \x1115,50 成为 “上一个”点01 FF                         新建颜色(1 = 红色)12 FB E7 12 CE                从 15+18,50-25 (33,25) 到 15+18,50-50 (33,0) 的偏移矢量。50-50 (33,0). (33,25)成为“上一个”点DF FE 00                      从 33,25 到 33-33,25+0 (0,25) 的公共端点矢量。(0,25). (0,25)成为“上一个”点00 FE E7                      从 (0,25) 到 0+0,25-25 (0,0) 公共端点的矢量。(0,0). (0,0)成为“上一个”点21 FE 00                      从 (0,0) 到 0+33,0+0 (33,0) 公共端点矢量。(33,0)成为“上一个”点00 FC                         文件结尾


0.jpg


1.jpg




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-8-31 16:20:32 来自手机 | 显示全部楼层
.net下使用资源文件打包图像文件也许是更简单的方式吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-31 16:31:26 | 显示全部楼层
  1. #region Resource

  2.         public static string GetStringFormResource(string path, string filename, string key)
  3.         {
  4.             ResourceManager rm = ResourceManager.CreateFileBasedResourceManager(filename, path, null);
  5.             return rm.GetString(key);
  6.         }

  7.         public static Bitmap GetImageFormResource(string path, string filename, string key)
  8.         {
  9.             ResourceManager rm = ResourceManager.CreateFileBasedResourceManager(filename, path, null);
  10.             return (Bitmap)rm.GetObject(key);
  11.         }

  12.         public static DataTableCollection GetTablesFormXmlString(string xml)
  13.         {
  14.             DataSet ds = new DataSet();
  15.             StringReader sr = new StringReader(xml);
  16.             ds.ReadXml(sr);
  17.             return ds.Tables;
  18.         }

  19.         public static DataTableCollection GetTablesFormXml(string filename)
  20.         {
  21.             DataSet ds = new DataSet();
  22.             ds.ReadXml(filename);
  23.             return ds.Tables;
  24.         }


  25.         public static bool MakeResources(string sourcepath, string destpath)
  26.         {
  27.             if (sourcepath[sourcepath.Length - 1] != '\\')
  28.             {
  29.                 sourcepath = sourcepath + "\";
  30.             }

  31.             DirectoryInfo di = new DirectoryInfo(sourcepath);
  32.             if (di == di.Root)
  33.             {
  34.                 return false;
  35.             }
  36.             else
  37.             {
  38.                 try
  39.                 {
  40.                     foreach (FileInfo dllfile in di.GetFiles("*.dll"))
  41.                     {

  42.                         File.Copy(dllfile.FullName, Directory.GetParent(sourcepath).FullName + "\" + dllfile.Name, true);
  43.                     }
  44.                 }
  45.                 catch
  46.                 { }

  47.                 if (destpath[destpath.Length - 1] != '\\')
  48.                 {
  49.                     destpath = destpath + "\";
  50.                 }
  51.                 string filename = destpath + di.Name + ".resources";
  52.                 if (File.Exists(filename))
  53.                 {
  54.                     File.Delete(filename);
  55.                 }

  56.                 ResourceWriter rw = new ResourceWriter(filename);
  57.                 foreach (FileInfo jpgfile in di.GetFiles("*.jpg"))
  58.                 {
  59.                     System.Drawing.Image img = System.Drawing.Image.FromFile(jpgfile.FullName);
  60.                     rw.AddResource(jpgfile.Name, img);
  61.                 }

  62.                 foreach (FileInfo xmlfile in di.GetFiles("*.xml"))
  63.                 {
  64.                     string s = File.ReadAllText(xmlfile.FullName);
  65.                     rw.AddResource(xmlfile.Name, s);
  66.                 }

  67.                 rw.Generate();
  68.                 rw.Close();

  69.                 return true;
  70.             }
  71.         }
  72.         #endregion
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-18 23:37 , Processed in 0.430501 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表