zoukankan      html  css  js  c++  java
  • C# 实现预览dwg文件完整源代码(无需autocad环境)

    1. using System;  
    2. using System.Drawing;  
    3. using System.Collections;  
    4. using System.ComponentModel;  
    5. using System.Windows.Forms;  
    6. using System.Data;  
    7. using System.IO;  
    8. namespace WindowsApplication3  
    9. {  
    10.  /// <summary>  
    11.  /// Form1 的摘要说明。  
    12.  /// </summary>  
    13.  public class Form1 : System.Windows.Forms.Form  
    14.  {  
    15.   private System.Windows.Forms.Timer timer1;  
    16.   private System.Windows.Forms.PictureBox pictureBox1;  
    17.   private System.ComponentModel.IContainer components;  
    18.   public Form1()  
    19.   {  
    20.    //  
    21.    // Windows 窗体设计器支持所必需的  
    22.    //  
    23.    InitializeComponent();  
    24.    //  
    25.    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码  
    26.    //  
    27.   }  
    28.   /// <summary>  
    29.   /// 清理所有正在使用的资源。  
    30.   /// </summary>  
    31.   protected override void Dispose( bool disposing )  
    32.   {  
    33.    if( disposing )  
    34.    {  
    35.     if (components != null)   
    36.     {  
    37.      components.Dispose();  
    38.     }  
    39.    }  
    40.    base.Dispose( disposing );  
    41.   }  
    42.   #region Windows Form Designer generated code  
    43.   /// <summary>  
    44.   /// 设计器支持所需的方法 - 不要使用代码编辑器修改  
    45.   /// 此方法的内容。  
    46.   /// </summary>  
    47.   private void InitializeComponent()  
    48.   {  
    49.    this.components = new System.ComponentModel.Container();  
    50.    this.timer1 = new System.Windows.Forms.Timer(this.components);  
    51.    this.pictureBox1 = new System.Windows.Forms.PictureBox();  
    52.    this.SuspendLayout();  
    53.    //   
    54.    // pictureBox1  
    55.    //   
    56.    this.pictureBox1.Location = new System.Drawing.Point(16, 16);  
    57.    this.pictureBox1.Name = "pictureBox1";  
    58.    this.pictureBox1.Size = new System.Drawing.Size(416, 272);  
    59.    this.pictureBox1.TabIndex = 0;  
    60.    this.pictureBox1.TabStop = false;  
    61.    //   
    62.    // Form1  
    63.    //   
    64.    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);  
    65.    this.ClientSize = new System.Drawing.Size(472, 310);  
    66.    this.Controls.AddRange(new System.Windows.Forms.Control[] {  
    67.                     this.pictureBox1});  
    68.    this.Name = "Form1";  
    69.    this.Text = "Form1";  
    70.    this.Load += new System.EventHandler(this.Form1_Load);  
    71.    this.ResumeLayout(false);  
    72.   }  
    73.   #endregion  
    74.   /// <summary>  
    75.   /// 应用程序的主入口点。  
    76.   /// </summary>  
    77.   [STAThread]  
    78.   static void Main()   
    79.   {  
    80.    Application.Run(new Form1());  
    81.   }  
    82.   private void Form1_Load(object sender, System.EventArgs e)  
    83.   {  
    84.    ViewDWG viewDWG=new ViewDWG();  
    85.    pictureBox1.Image =viewDWG.GetDwgImage("c:\\1.dwg");  
    86.   }  
    87.  }  
    88.  class ViewDWG  
    89.  {  
    90.   struct BITMAPFILEHEADER  
    91.   {  
    92.    public short bfType;  
    93.    public int bfSize;  
    94.    public short bfReserved1;  
    95.    public short bfReserved2;  
    96.    public int bfOffBits;  
    97.   }  
    98.   public  Image GetDwgImage(string FileName)  
    99.   {  
    100.    if (!(File.Exists(FileName)))  
    101.    {  
    102.     throw new FileNotFoundException("文件没有被找到");  
    103.    }  
    104.    FileStream DwgF;  //文件流  
    105.    int PosSentinel;  //文件描述块的位置  
    106.    BinaryReader br;  //读取二进制文件  
    107.    int TypePreview;  //缩略图格式  
    108.    int PosBMP;       //缩略图位置   
    109.    int LenBMP;       //缩略图大小  
    110.    short biBitCount; //缩略图比特深度   
    111.    BITMAPFILEHEADER biH; //BMP文件头,DWG文件中不包含位图文件头,要自行加上去  
    112.    byte[] BMPInfo;       //包含在DWG文件中的BMP文件体  
    113.    MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流  
    114.    BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类  
    115.    Image myImg = null;  
    116.    try  
    117.    {  
    118.     DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read);   //文件流  
    119.     br = new BinaryReader(DwgF);  
    120.     DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取  
    121.     PosSentinel = br.ReadInt32();  //第13到17字节指示缩略图描述块的位置  
    122.     DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin);  //将指针移到缩略图描述块的第31字节  
    123.     TypePreview = br.ReadByte();  //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式  
    124.     if (TypePreview == 1)  
    125.     {  
    126.     }  
    127.     else if (TypePreview == 2 || TypePreview == 3)  
    128.     {  
    129.      PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置  
    130.      LenBMP = br.ReadInt32(); //位图的大小  
    131.      DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块  
    132.      biBitCount = br.ReadInt16(); //读取比特深度  
    133.      DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用  
    134.      BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息  
    135.      br.Close();  
    136.      DwgF.Close();  
    137.      biH.bfType = 19778; //建立位图文件头  
    138.      if (biBitCount < 9)  
    139.      {  
    140.       biH.bfSize = 54 + 4 * (int)(Math.Pow(2, biBitCount)) + LenBMP;  
    141.      }  
    142.      else  
    143.      {  
    144.       biH.bfSize = 54 + LenBMP;  
    145.      }  
    146.      biH.bfReserved1 = 0; //保留字节  
    147.      biH.bfReserved2 = 0; //保留字节  
    148.      biH.bfOffBits = 14 + 40 + 1024; //图像数据偏移  
    149.      //以下开始写入位图文件头  
    150.      bmpr.Write(biH.bfType); //文件类型  
    151.      bmpr.Write(biH.bfSize);  //文件大小  
    152.      bmpr.Write(biH.bfReserved1); //0  
    153.      bmpr.Write(biH.bfReserved2); //0  
    154.      bmpr.Write(biH.bfOffBits); //图像数据偏移  
    155.      bmpr.Write(BMPInfo); //写入位图  
    156.      BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处  
    157.      myImg = Image.FromStream(BMPF); //创建位图文件对象  
    158.      bmpr.Close();  
    159.      BMPF.Close();  
    160.     }  
    161.     return myImg;  
    162.    }  
    163.    catch(Exception ex)  
    164.    {  
    165.     throw new Exception(ex.Message);  
    166.    }  
    167.   }  
    168.  }  
    169. }  
  • 相关阅读:
    关于ssh的一篇很好的文章
    课后作业--2 阅读计划及问题
    课后作业--1
    课后作业PPT 7
    大道至简 7、8、读后感
    第六章 读后感
    第五篇 读后感
    数组课后作业
    课后作业1:字串加密
    第四篇 读后感
  • 原文地址:https://www.cnblogs.com/lijiu/p/3832137.html
Copyright © 2011-2022 走看看