`

BMP图形文件分析类(c#)

阅读更多

1using System;
  2using JJBase.FILE;
  3namespace JJBase.Image
  4{
  5    /**//// <summary>
  6    /// BMP 的摘要说明。
  7    /// </summary>
  8    public class BMP
  9    {
 10        
 11        public BMP()
 12        {
 13            //
 14            //TODO: 在此处添加构造函数逻辑
 15            //作者:梁俊杰
 16            //时间:2005-9-29
 17            //功能:分析bmp文件格式
 18            //本文参考了林福宗老师的有关BMP文件格式的文章
 19            //参考链接:http://www.chinahacker.net/article/showarticle.asp?articleid=20809
 20            //参考链接:http://www.moon-soft.com/program/FORMAT/graphics/Bmp.html
 21            //
 22        }

 23        /**//*BMP(BitMap-File)图形文件是Windows采用的图形文件格式,在Windows环境
 24         * 下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各
 25         * 图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与
 26         * 显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB
 27         * (device-dependent BitMap)文件格式。Windows 3.0以后的BMP图象文件与
 28         * 显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB
 29         * (device-independent BitMap)格式(注:Windows 3.0以后,在系统中仍
 30         * 然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将
 31         * 图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的
 32         * 是为了让Windows能够在任何类型的显示设备上显示所存储的图象。BMP位图文件
 33         * 默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
 34         * */

 35        public struct StructBMP
 36        {
 37            public BMPHeader Header;
 38            public BMPPalette Palette;
 39            public BMPData Data;
 40        }

 41        public struct BMPHeader
 42        {
 43            /**//*位图文件可看成由4个部分组成:位图文件头(BitMap-file header)、
 44             * 位图信息头(BitMap-information header)、彩色表(color table)和
 45             * 定义位图的字节阵列,
 46             * */

 47            public string Identifier;/**//*2 bytes,识别位图的类型: 
 48            ‘BM’ : Windows 3.1x, 95, NT, … 
 49            ‘BA’ :OS/2 BitMap Array 
 50            ‘CI’ :OS/2 Color Icon 
 51            ‘CP’ :OS/2 Color Pointer 
 52            ‘IC’ : OS/2 Icon 
 53            ‘PT’ :OS/2 Pointer 
 54            注:因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识“BM”就行。
 55            */
 
 56            public System.Int32 FileSize;//1 dword,用字节表示的整个文件的大小 
 57            public byte[] Reserved;//1 dword,保留,必须设置为0 
 58            public System.Int32 BitMapDataOffset;//1 dword,从文件开始到位图数据开始之间的数据(BitMap data)之间的偏移量
 59            public System.Int32 BitMapHeaderSize;/**//*1 dword
 60            位图信息头(BitMap Info Header)的长度,用来描述位图的颜色、压缩方法等。下面的长度表示: 
 61            28h - windows 3.1x, 95, nt, …
 62            0ch - os/2 1.x
 63            f0h - os/2 2.x
 64            注:在Windows95、98、2000等操作系统中,位图信息头的长度并不一定是28h,因为微软已经制定出了新的BMP文件格式,其中的信息头结构变化比较大,长度加长。所以最好不要直接使用常数28h,而是应该从具体的文件中读取这个值。这样才能确保程序的兼容性。 
 65             */

 66            public System.Int32 Width;//1 dword,位图的宽度,以象素为单位
 67            public System.Int32 Height;//1 dword,位图的高度,以象素为单位 
 68            public System.Int16 Planes;//1 word,位图的位面数(注:该值将总是1) 
 69            public System.Int16 BitsPerPixel;
 70            /**//*1 word
 71            每个象素的位数 
 72            1 - 单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。你可以自己定义这两种颜色) 
 73            4 - 16 色位图 
 74            8 - 256 色位图 
 75            16 - 16bit 高彩色位图 
 76            24 - 24bit 真彩色位图 
 77            32 - 32bit 增强型真彩色位图 
 78            */
 
 79            public System.Int32 Compression;
 80            /**//*1 dword
 81            压缩说明: 
 82            0 - 不压缩 (使用BI_RGB表示) 
 83            1 - RLE 8-使用8位RLE压缩方式(用BI_RLE8表示) 
 84            2 - RLE 4-使用4位RLE压缩方式(用BI_RLE4表示) 
 85            3 - Bitfields-位域存放方式(用BI_BITFIELDS表示) 
 86            */

 87            public System.Int32 BitMapDataSize;//1 dword,用字节数表示的位图数据的大小。该数必须是4的倍数
 88            public System.Int32 HResolution;//1 dword,用象素/米表示的水平分辨率
 89            public System.Int32 VResolution;//1 dword,用象素/米表示的垂直分辨率
 90            public System.Int32 Colors;//1 dword,位图使用的颜色数。如8-比特/象素表示为100h或者 256. 
 91            public System.Int32 ImportantColors;
 92            /**//*1 dword,指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要 
 93            */

 94        }

 95        public struct BMPPalette
 96        {
 97            public byte[] Palette;//new byte[8192];//bmp规范没有规定调色板最大81926字节,此处可以根据程序需要调节
 98            /**//*调色板数据根据BMP版本的不同而不同PaletteN * 4 byte调色板规范。
 99            对于调色板中的每个表项,这4个字节用下述方法来描述RGB的值: 1字节用于蓝色分量 
100            1字节用于绿色分量 
101            1字节用于红色分量 
102            1字节用于填充符(设置为0) 
103            */

104        }

105        public struct BMPData
106        {
107            public byte[] BitMapData;//=new byte[1024000];//bmp规范没有规定bmp数据最多为1024000,此处可以根据需要调整
108            /**//*
109            图象数据根据BMP版本及调色板尺寸的不同而不同BitMap Dataxxx bytes该域的大小取决
110            于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节,这些数据可能是
111            彩色调色板的索引号,也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。
112            */

113        }

114        public void ProcessBMP(ref StructBMP sbmp,byte[] bytesFile)
115        {
116            byte[] word1=new byte[2];
117            byte[] word2=new byte[4];
118            System.Int32 result;
119            string str="";
120            word1[0]=bytesFile[0];
121            word1[1]=bytesFile[1];
122            str=FromBytesToString(word1);
123            sbmp.Header.Identifier=str;
124            word2[0]=bytesFile[2];
125            word2[1]=bytesFile[3];
126            word2[2]=bytesFile[4];
127

分享到:
评论

相关推荐

    c#编写的bmp文件的读取资料

    本资源包提供了一种方法,通过C#代码来读取BMP文件,这在进行图形处理、图像分析或者游戏开发等场景下非常有用。尽管代码可能注释较少,但其设计简单易懂,具有高度的实用性。 BMP文件格式是一种未经压缩的图像文件...

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

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

    BatchChange_C#_bmp转换png_shownv1g_

    Bitmap和Graphics类则分别代表了位图对象和图形上下文,是Image类的具体实现。在进行格式转换时,我们可以使用Bitmap的Save方法,通过指定不同的编码器来改变输出格式。 下面是一个简单的C#代码示例,展示了如何将...

    C# 图形处理大全源码(共60多种算法).rar

    在C#编程语言中,图形处理是一门重要的技术,它涉及到图像的创建、修改、分析以及显示等操作。本资源库包含的"C# 图形处理大全源码(共60多种算法)"提供了丰富的示例代码,可以帮助开发者深入理解并实践图形处理的...

    YUV420转BMP

    在C#环境中,可以使用.NET Framework提供的System.Drawing命名空间中的类来实现这个转换过程。例如,可以创建Bitmap对象,然后通过LockBits和Marshal.Copy方法直接操作像素数据。参考链接中的博客文章...

    棋盘覆盖C# (图形保存)

    6. **图形保存**:使用`Save`方法将当前的棋盘状态保存为图片文件,如BMP、JPEG或PNG格式。 7. **界面交互**:提供按钮或菜单选项,允许用户保存当前棋盘、重新开始游戏等。 8. **异常处理**:加入适当的错误处理...

    c# PGM图片处理 (将PGM格式转换为Bmp格式)

    在IT行业中,图像处理是一项非常重要的任务,尤其是在游戏开发、图像分析、图形用户界面等领域。在.NET Framework中,System.Drawing命名空间提供了丰富的类用于处理图像,如Image、Graphics等,但默认并不支持所有...

    c#图形图像编程资料

    Image类是所有图像对象的基类,它支持常见的图像格式如JPEG、PNG、BMP等。我们可以使用Image.FromFile或Image.FromStream方法加载图像,然后通过Graphics对象的DrawImage方法将其绘制到窗体或控件上。此外,Image类...

    获取BMP的RGB值

    在计算机图形学中,BMP(Bitmap)是一种常见的位图图像格式,用于存储像素数据。当我们说“获取BMP的RGB值”时,实际上是指读取BMP文件中每个像素的红、绿、蓝三种颜色分量的数值,因为RGB(Red, Green, Blue)是...

    ppm图片格式转换为bmp

    在压缩包中的"40564353ppm2bmp_source"可能是源代码文件,包含了实现上述转换功能的函数或类。通过分析这个源代码,你可以更具体地了解转换过程的实现细节,例如如何处理不同颜色深度的图像,以及在内存中如何组织和...

    位图与调色板源代码bmp_in_mdiclient2.zip_BMP 调色板_C#调色_c# 调色板_in_调色板

    位图(Bitmap)是计算机图形学中常用的一种图像文件格式,尤其在Windows操作系统中广泛使用。位图由像素数组组成,每个像素都有自己的颜色值,这些颜色值组合起来形成了我们看到的图像。位图文件通常包含图像数据、...

    C#图形图像编程最好的参考例子

    在C#编程环境中,图形图像处理是一个非常重要的领域,它涉及到游戏开发、用户界面设计、数据分析可视化等多个方面。本资源“C#图形图像编程最好的参考例子”提供了丰富的实例,帮助开发者深入理解和应用C#中的图形...

    C#实现图像平移、镜像、缩放及任意角度的旋转

    这些操作在图形用户界面(GUI)应用、游戏开发、图像分析和许多其他领域都有广泛的应用。以下将详细讲解如何在C#中实现这些功能。 首先,我们来探讨图像的平移。平移是指图像在二维空间中的移动,可以改变图像的...

    BMP文件转换为JPG文件的源代码(356KB)

    本话题主要涉及的是将BMP(Bitmap)格式的图像文件转换为JPG(Joint Photographic Experts Group)格式的源代码。BMP是一种无损的位图格式,它存储了图像的每个像素的颜色信息,而JPG则是一种有损压缩格式,常用于...

    三次样条插值C#实现及函数绘图

    项目中的`Three_Times_spline_Interpolation`文件可能包含了实现上述功能的源代码,包括数据结构定义、插值算法实现、图形绘制类以及主程序入口。通过阅读和理解这些代码,你可以学习到如何在C#环境中进行数值计算和...

    C#电子签名功能

    对于初学者来说,通过阅读和分析这个文件,可以学习到如何在C#中实现图形用户界面、处理用户输入、图形绘制以及文件操作等知识。 总结一下,这个"C#电子签名功能"项目涉及了以下知识点: 1. C#编程基础:语法、变量...

    C#批量图像格式转换

    在C#中,我们可以使用文件系统相关的类,如Directory和FileInfo,来遍历指定目录下的所有图像文件,并对每个文件执行格式转换操作。 批量图像格式转换的核心在于Image类,它位于System.Drawing命名空间下。Image类...

    C#实现图像处理软件

    1. 图像打开与保存:使用Image类的FromFile和Save方法读写图像文件,支持常见的格式如JPEG、PNG、BMP等。 2. 基本操作:缩放、旋转、裁剪、调整亮度/对比度等,通过Bitmap对象的Clone方法创建副本并应用变换。 3. ...

    C语言的png和jpeg图片格式转换为bmp格式

    - **JPEG (Joint Photographic Experts Group)**:JPEG是一种有损压缩的格式,适合存储照片类图像,通过压缩可以大幅度减小文件大小,但会损失部分图像质量。 - **BMP (Bitmap)**:BMP是Windows操作系统中常用的...

    C#winform画图程序(附解决方案,挺不错的)

    2. **图形编程**: C#中的`System.Drawing`命名空间提供了进行图形绘制的类和方法。`Graphics`类是核心,它提供了绘制线条、曲线、形状和文本的能力。 3. **Bitmap**: `Bitmap`类代表了一个图像,它可以是位图或GIF...

Global site tag (gtag.js) - Google Analytics