C# 实现预览dwg文件完整源代码(无需autocad环境)
- using System;
- using System.Drawing;
- using System.Collections;
- using System.ComponentModel;
- using System.Windows.Forms;
- using System.Data;
- using System.IO;
- namespace WindowsApplication3
- {
- /// <summary>
- /// Form1 的摘要说明。
- /// </summary>
- public class Form1 : System.Windows.Forms.Form
- {
- private System.Windows.Forms.Timer timer1;
- private System.Windows.Forms.PictureBox pictureBox1;
- private System.ComponentModel.IContainer components;
- public Form1()
- {
- //
- // Windows 窗体设计器支持所必需的
- //
- InitializeComponent();
- //
- // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
- //
- }
- /// <summary>
- /// 清理所有正在使用的资源。
- /// </summary>
- protected override void Dispose( bool disposing )
- {
- if( disposing )
- {
- if (components != null)
- {
- components.Dispose();
- }
- }
- base.Dispose( disposing );
- }
- #region Windows Form Designer generated code
- /// <summary>
- /// 设计器支持所需的方法 - 不要使用代码编辑器修改
- /// 此方法的内容。
- /// </summary>
- private void InitializeComponent()
- {
- this.components = new System.ComponentModel.Container();
- this.timer1 = new System.Windows.Forms.Timer(this.components);
- this.pictureBox1 = new System.Windows.Forms.PictureBox();
- this.SuspendLayout();
- //
- // pictureBox1
- //
- this.pictureBox1.Location = new System.Drawing.Point(16, 16);
- this.pictureBox1.Name = "pictureBox1";
- this.pictureBox1.Size = new System.Drawing.Size(416, 272);
- this.pictureBox1.TabIndex = 0;
- this.pictureBox1.TabStop = false;
- //
- // Form1
- //
- this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
- this.ClientSize = new System.Drawing.Size(472, 310);
- this.Controls.AddRange(new System.Windows.Forms.Control[] {
- this.pictureBox1});
- this.Name = "Form1";
- this.Text = "Form1";
- this.Load += new System.EventHandler(this.Form1_Load);
- this.ResumeLayout(false);
- }
- #endregion
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main()
- {
- Application.Run(new Form1());
- }
- private void Form1_Load(object sender, System.EventArgs e)
- {
- ViewDWG viewDWG=new ViewDWG();
- pictureBox1.Image =viewDWG.GetDwgImage("c:\\\\1.dwg");
- }
- }
- class ViewDWG
- {
- struct BITMAPFILEHEADER
- {
- public short bfType;
- public int bfSize;
- public short bfReserved1;
- public short bfReserved2;
- public int bfOffBits;
- }
- public Image GetDwgImage(string FileName)
- {
- if (!(File.Exists(FileName)))
- {
- throw new FileNotFoundException("文件没有被找到");
- }
- FileStream DwgF; //文件流
- int PosSentinel; //文件描述块的位置
- BinaryReader br; //读取二进制文件
- int TypePreview; //缩略图格式
- int PosBMP; //缩略图位置
- int LenBMP; //缩略图大小
- short biBitCount; //缩略图比特深度
- BITMAPFILEHEADER biH; //BMP文件头,DWG文件中不包含位图文件头,要自行加上去
- byte[] BMPInfo; //包含在DWG文件中的BMP文件体
- MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流
- BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类
- Image myImg = null;
- try
- {
- DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read); //文件流
- br = new BinaryReader(DwgF);
- DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取
- PosSentinel = br.ReadInt32(); //第13到17字节指示缩略图描述块的位置
- DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin); //将指针移到缩略图描述块的第31字节
- TypePreview = br.ReadByte(); //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式
- if (TypePreview == 1)
- {
- }
- else if (TypePreview == 2 || TypePreview == 3)
- {
- PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置
- LenBMP = br.ReadInt32(); //位图的大小
- DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块
- biBitCount = br.ReadInt16(); //读取比特深度
- DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用
- BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息
- br.Close();
- DwgF.Close();
- biH.bfType = 19778; //建立位图文件头
- if (biBitCount < 9)
- {
- biH.bfSize = 54 + 4 * (int)(Math.Pow(2, biBitCount)) + LenBMP;
- }
- else
- {
- biH.bfSize = 54 + LenBMP;
- }
- biH.bfReserved1 = 0; //保留字节
- biH.bfReserved2 = 0; //保留字节
- biH.bfOffBits = 14 + 40 + 1024; //图像数据偏移
- //以下开始写入位图文件头
- bmpr.Write(biH.bfType); //文件类型
- bmpr.Write(biH.bfSize); //文件大小
- bmpr.Write(biH.bfReserved1); //0
- bmpr.Write(biH.bfReserved2); //0
- bmpr.Write(biH.bfOffBits); //图像数据偏移
- bmpr.Write(BMPInfo); //写入位图
- BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处
- myImg = Image.FromStream(BMPF); //创建位图文件对象
- bmpr.Close();
- BMPF.Close();
- }
- return myImg;
- }
- catch(Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- }
- }
C# 实现预览dwg文件完整源代码(无需autocad环境)的更多相关文章
- html页面预览pdf文件使用插件pdfh5.js
html预览pdf文件需要依赖pdf.js 移动端适配需要pdfh5.js 记录移动端适配pdfh5.js的用发 在线预览: https://www.gjtool.cn/pdfh5/pdf.html? ...
- linux在线预览pdf文件开发思路
准备:swftools,flexpaper 基本思路: 1,将pdf文件转化成swf文件 2,使用flexpaper预览swf文件 主要代码: 1,在linux中安装swftools.官网下载swft ...
- es5预览本地文件、es6练习代码演示案例
es6简单基础: <!DOCTYPE html> <html> <head> <meta name="viewport" content= ...
- 用pdf.js实现在移动端在线预览pdf文件
用pdf.js实现在移动端在线预览pdf文件1.下载pdf.js 官网地址:https://mozilla.github.io/pdf.js/ 2.配置 下载下来的文件包,就是一个demo ...
- WinForm中预览Office文件
WinForm预览Office文档 使用WinForm, WPF, Office组件 原理:使用Office COM组件将Word,Excel转换为XPS文档, 将WPF的DocumentViewer ...
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件
一.问题描述 今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建android项目时,预览activity_main.xml文件时提示 ...
- 使用qmlscene预览qml文件
功能:可以预览qml文件的界面 使用:qmlscene myapp.qml
- 文档控件NTKO OFFICE 详细使用说明之预览Excel文件(查看、编辑、保存回服务器)
1.在线预览Excel文件 (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将www.ntko.com加入到浏 ...
- 文档控件NTKO OFFICE 详细使用说明之预览PDF文件(禁止打印、下载、另存为、防抓包下载)
1.在线预览PDF文件(禁止打印.下载.复制.另存为) (1) 运行环境 ① 浏览器:支持IE7-IE11(平台版本还支持Chrome和Firefox) ② IE工具栏-Internet 选项:将ww ...
随机推荐
- IIS 7 支持10万并发请求
原文链接:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error S ...
- 基于nginx的rtmp的服务器(nginx-rtmp-module)
一,首先下载安装nginx需要依赖的库文件: 1.1,选定源码目录 选定目录 /usr/local/RTMP cd /usr/local/RTMP 1.2,安装PCRE库 cd /usr/local/ ...
- Java中list<Object>集合去重实例
一:Java中list去重的方法很多,下面说一下其中一种方法:把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中: 二:实例 这里需要注意的是:使用c ...
- C# ITextSharp pdf 自动打印
PDF生成后直接进入打印预览不用下载 using iTextSharp.text; using iTextSharp.text.pdf; Document pdfDoc = new Document( ...
- 转载:js和jquery获取父级元素、子级元素、兄弟元素的方法
转载网址: 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元 ...
- python视频教程大全集下载
python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV Python从入门到精通视频(全60集)链接:http://pan.baidu.com/s/1e ...
- Keil C51处理可重入函数问题的探讨
在程序设计中,变量具体可以分为四种类型:全局变量.静态全局变量.局部变量.静态局部变量.这几种变量类型对函数的可重入产生的重大的影响,因为不同的编译器采用不同的策略. 针对51的存储区有限,keil ...
- 有空可以对C#尝一下鲜,WCF看上去很诱人(跨进程、跨机器、跨子网,跨企业网乃至跨Internet的分布式服务)
说道底不还是要借助NGNIX实现,PHP自身呢?C#的WCF可以脱离IIS就可以实现跨进程.跨机器.跨子网,跨企业网乃至跨Internet的分布式服务,宿主可以是IIS,WinForm,WPF, Wi ...
- ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传
最近在做 Android 端文件上传,要求采用 form 表单的方式提交,项目使用的 afinal 框架有文件上传功能,但是始终无法与php写的服务端对接上,无法上传成功.读源码发现:afinal 使 ...
- Intel 凌动 D525 产品参数Intel 凌动 Z3735F 产品参数
https://item.taobao.com/item.htm?spm=a230r.1.14.8.kauehT&id=40450541158&ns=1&abbucket=19 ...