`
thinkgem
  • 浏览: 587420 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

C# 实现预览dwg文件完整源代码(无需autocad环境)

    博客分类:
  • C#
阅读更多
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);
   }
  }
 }
}
 
分享到:
评论
1 楼 hlzhou 2010-11-30  
项目右键添加引用
System.Windows.Forms.dll

相关推荐

    C#实现DWG图片预览.txt

    根据提供的文件信息,本文将详细解析如何利用C#语言实现对DWG文件的图片预览功能。本技术文章主要涵盖以下关键知识点: ### 一、理解DWG文件格式 DWG(Drawing Web Format)是一种由Autodesk公司开发的用于CAD...

    C语言直接读写DWG文件源代码

    标题 "C语言直接读写DWG文件源代码" 指的是使用C语言编程来实现对AutoCAD DWG文件的直接读取和写入功能。DWG是AutoCAD的默认图形文件格式,它包含了二维和三维的设计数据。C语言是一种底层、高效的编程语言,非常...

    C#winfrm-打开AutoCAD dwg/dxf文件并导出点位坐标及线型信息。

    在本文中,我们将深入探讨如何使用C# WinForms来实现与AutoCAD dwg/dxf文件的交互,包括打开、浏览、导出点位坐标、线型信息以及进行图形元素分析的功能。这一技术对于进行CAD软件的二次开发尤其重要,能够帮助...

    C#开发的将DWG文件转换为PDF的程序

    本项目是利用C#来实现一个功能,即把DWG(AutoCAD图形设计软件的默认格式)文件转换为PDF文档。这种转换在工程、建筑、设计等领域中非常常见,因为它允许用户方便地分享和打印CAD图纸,而无需拥有原始的CAD软件。 ...

    AutoCAD DWG 预览

    AutoCAD DWG预览是基于AutoCAD的.Net API和C#编程语言实现的功能,它允许用户在不打开完整AutoCAD软件的情况下对DWG(Drawing)文件进行快速查看和预览。DWG是一种由AutoCAD创建的二进制文件格式,广泛用于存储工程...

    AutoCAD代码包:一个强大的库,可帮助您使用AutoCAD.NETAPI开发AutoCAD插件_C#_下载.zip

    1. **源代码**:包含C#编写的类库,这些类库封装了AutoCAD .NET API的常用操作,例如创建几何形状、处理图层、读写DWG文件等。 2. **示例**:可能包含演示如何使用Code Pack的示例项目,这些示例可以帮助你理解和...

    C#.net开发AutoCAD插件实例源码

    在提供的文件“CAD插件开发.txt”中,可能包含了关于如何设置开发环境、引用AutoCAD的DLL、创建.NET类库项目、编写插件代码、以及调试和部署插件的详细步骤。这些步骤通常包括: 1. **安装开发工具**:Visual ...

    NetDXFViewer C# WPF DWG

    DWG是AutoCAD的默认文件格式,通常包含更丰富的图形信息,而NetDXFViewer虽主要针对DXF,但可能也支持DWG的某些操作。 压缩包中的“NetDXFViewer-v0.1-master”可能是指项目的源码仓库,通常在GitHub等代码托管平台...

    DWG文件读写开发库

    DWG文件读写开发库是专门用于处理DWG(Drawing)格式文件的工具,这种格式通常与AutoCAD软件紧密关联,用于存储二维和三维设计数据。这个开发库为程序员提供了在C++和C#编程环境中读取和写入DWG文件的能力,极大地...

    基于c#二次开发CAD

    本项目聚焦于为AutoCAD 2008进行定制化开发,利用C#编程语言构建类库,旨在实现自动化绘图功能。下面将详细阐述相关知识点。 1. **AutoCAD二次开发**:AutoCAD提供了丰富的API接口和开发工具,如ObjectARX、.NET ...

    DWG To Shape的源代码

    DWG To Shape源代码,是将AutoCAD的DWG格式文件转换为Shape文件的一种程序实现。DWG是AutoCAD的默认图形存储格式,广泛应用于工程制图、建筑设计等领域。Shape文件,全称ESRI Shapefile,是一种常见的地理信息系统...

    AutoCAD VBA _ VB.NET开发基础与实例教程 第2版源码

    "我的光盘"文件可能包含了上述所有内容的源代码,供学习者参考和实践。通过学习这些源码,你可以深入理解AutoCAD的内部工作原理,掌握VBA和VB.NET的开发技能,从而能够创建出符合业务需求的定制化AutoCAD解决方案。...

    DWG文件比较--可二次开发

    在IT行业中,CAD(计算机辅助设计)是一种广泛应用于工程、建筑和设计领域的技术,而DWG(Drawing)是CAD软件中最常见的文件格式,用于存储二维和三维设计数据。本话题聚焦于“DWG文件比较——可二次开发”,这是一...

    DWG文件批量转PDF

    标题中的“DWG文件批量转PDF”指的是将多个DWG(AutoCAD图形设计软件的默认文件格式)文件一次性转换为PDF(便携式文档格式)的过程。这种转换在需要共享或打印CAD设计时非常有用,因为PDF文件可以跨平台查看且保持...

    CAD(dwg)转SVG.rar

    总结来说,这个压缩包提供的工具或源代码示例演示了如何使用C#和AutoCAD的API将DWG格式的CAD设计文件转换为SVG格式,这在需要在网络上展示或编辑CAD图纸时非常有用。对于那些熟悉C#编程和CAD应用开发的人来说,这是...

    C#调用CAD绘图源代码

    而“C#调用CAD绘图源代码”则是关于如何通过C#来与AutoCAD这类计算机辅助设计(CAD)软件进行交互,实现自动化绘图或二次开发的技术。这种技术的应用场景包括但不限于自动化工程制图、批量处理CAD数据、集成CAD功能...

    易语言读取DWG预览图

    在提供的压缩包文件中,"易语言读取DWG预览图源码"可能包含了实现以上功能的源代码。学习和理解这些源代码,开发者可以掌握易语言环境下处理DWG文件的核心技术,从而扩展自己的编程能力,尤其是在图形处理和CAD应用...

    java+.net+js+php 实现cad文件查看和编辑

    例如,利用.NET的Autodesk.AutoCAD组件,开发者可以直接在.NET环境中调用CAD的功能,实现文件的查看、编辑和保存。同时,.NET还可以通过WCF(Windows Communication Foundation)服务与Java或PHP进行通信,完成...

    AutoCAD的二次开发实例

    这个API允许开发者创建、修改和管理DWG文件,执行绘图操作,读写图层信息,以及调用AutoCAD的内置命令等。C#作为.NET框架的一部分,提供了丰富的类库和强大的语法支持,使得与AutoCAD的集成变得更为简洁和高效。 ...

Global site tag (gtag.js) - Google Analytics