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文件的图片预览功能。本技术文章主要涵盖以下关键知识点: ### 一、理解DWG文件格式 DWG(Drawing Web Format)是一种由Autodesk公司开发的用于CAD...
标题 "C语言直接读写DWG文件源代码" 指的是使用C语言编程来实现对AutoCAD DWG文件的直接读取和写入功能。DWG是AutoCAD的默认图形文件格式,它包含了二维和三维的设计数据。C语言是一种底层、高效的编程语言,非常...
在本文中,我们将深入探讨如何使用C# WinForms来实现与AutoCAD dwg/dxf文件的交互,包括打开、浏览、导出点位坐标、线型信息以及进行图形元素分析的功能。这一技术对于进行CAD软件的二次开发尤其重要,能够帮助...
本项目是利用C#来实现一个功能,即把DWG(AutoCAD图形设计软件的默认格式)文件转换为PDF文档。这种转换在工程、建筑、设计等领域中非常常见,因为它允许用户方便地分享和打印CAD图纸,而无需拥有原始的CAD软件。 ...
AutoCAD DWG预览是基于AutoCAD的.Net API和C#编程语言实现的功能,它允许用户在不打开完整AutoCAD软件的情况下对DWG(Drawing)文件进行快速查看和预览。DWG是一种由AutoCAD创建的二进制文件格式,广泛用于存储工程...
1. **源代码**:包含C#编写的类库,这些类库封装了AutoCAD .NET API的常用操作,例如创建几何形状、处理图层、读写DWG文件等。 2. **示例**:可能包含演示如何使用Code Pack的示例项目,这些示例可以帮助你理解和...
在提供的文件“CAD插件开发.txt”中,可能包含了关于如何设置开发环境、引用AutoCAD的DLL、创建.NET类库项目、编写插件代码、以及调试和部署插件的详细步骤。这些步骤通常包括: 1. **安装开发工具**:Visual ...
DWG是AutoCAD的默认文件格式,通常包含更丰富的图形信息,而NetDXFViewer虽主要针对DXF,但可能也支持DWG的某些操作。 压缩包中的“NetDXFViewer-v0.1-master”可能是指项目的源码仓库,通常在GitHub等代码托管平台...
DWG文件读写开发库是专门用于处理DWG(Drawing)格式文件的工具,这种格式通常与AutoCAD软件紧密关联,用于存储二维和三维设计数据。这个开发库为程序员提供了在C++和C#编程环境中读取和写入DWG文件的能力,极大地...
本项目聚焦于为AutoCAD 2008进行定制化开发,利用C#编程语言构建类库,旨在实现自动化绘图功能。下面将详细阐述相关知识点。 1. **AutoCAD二次开发**:AutoCAD提供了丰富的API接口和开发工具,如ObjectARX、.NET ...
DWG To Shape源代码,是将AutoCAD的DWG格式文件转换为Shape文件的一种程序实现。DWG是AutoCAD的默认图形存储格式,广泛应用于工程制图、建筑设计等领域。Shape文件,全称ESRI Shapefile,是一种常见的地理信息系统...
在IT行业中,CAD(计算机辅助设计)是一种广泛应用于工程、建筑和设计领域的技术,而DWG(Drawing)是CAD软件中最常见的文件格式,用于存储二维和三维设计数据。本话题聚焦于“DWG文件比较——可二次开发”,这是一...
"我的光盘"文件可能包含了上述所有内容的源代码,供学习者参考和实践。通过学习这些源码,你可以深入理解AutoCAD的内部工作原理,掌握VBA和VB.NET的开发技能,从而能够创建出符合业务需求的定制化AutoCAD解决方案。...
标题中的“DWG文件批量转PDF”指的是将多个DWG(AutoCAD图形设计软件的默认文件格式)文件一次性转换为PDF(便携式文档格式)的过程。这种转换在需要共享或打印CAD设计时非常有用,因为PDF文件可以跨平台查看且保持...
总结来说,这个压缩包提供的工具或源代码示例演示了如何使用C#和AutoCAD的API将DWG格式的CAD设计文件转换为SVG格式,这在需要在网络上展示或编辑CAD图纸时非常有用。对于那些熟悉C#编程和CAD应用开发的人来说,这是...
而“C#调用CAD绘图源代码”则是关于如何通过C#来与AutoCAD这类计算机辅助设计(CAD)软件进行交互,实现自动化绘图或二次开发的技术。这种技术的应用场景包括但不限于自动化工程制图、批量处理CAD数据、集成CAD功能...
在提供的压缩包文件中,"易语言读取DWG预览图源码"可能包含了实现以上功能的源代码。学习和理解这些源代码,开发者可以掌握易语言环境下处理DWG文件的核心技术,从而扩展自己的编程能力,尤其是在图形处理和CAD应用...
例如,利用.NET的Autodesk.AutoCAD组件,开发者可以直接在.NET环境中调用CAD的功能,实现文件的查看、编辑和保存。同时,.NET还可以通过WCF(Windows Communication Foundation)服务与Java或PHP进行通信,完成...
这个API允许开发者创建、修改和管理DWG文件,执行绘图操作,读写图层信息,以及调用AutoCAD的内置命令等。C#作为.NET框架的一部分,提供了丰富的类库和强大的语法支持,使得与AutoCAD的集成变得更为简洁和高效。 ...