位图文件

合集下载

常用图片文件格式

常用图片文件格式

常用图片文件格式1、bmp格式——位图文件——几乎不压缩——占用磁盘空间过大Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。

随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。

这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点——占用磁盘空间过大。

2、jpg格式——国际标准图像压缩格式——有损压缩JPEG是国际标准图像压缩格式,是用于连续色调静态图像压缩的一种标准,文件后缀名为,jpg或,jpeg,是最常用的图像文件格式。

属于有损压缩格式,它能够将图像压缩在很小的储存空间,一定程度上会造成图像数据的损伤。

尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量降低,如果追求高品质图像,则不宜采用过高的压缩比例。

JPEG压缩技术十分先进,它可以用有损压缩方式去除冗余的图像数据,换句话说,就是可以用较少的磁盘空间得到较好的图像品质。

而且JPEG是一种很灵活的格式,具有调节图像质量的功能,它允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比越大,图像品质就越低;相反地,压缩比越小,图像品质就越高。

同一幅图像,用JPEG格式存储的文件是其他类型文件的1/10~1/20,通常只有几十KB,质量损失较小,基本无法看出。

JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网;它可减少图像的传输时间,支持24位真彩色;也普遍应用于需要连续色调的图像中。

3、png格式——无损压缩的位图格式——支持透明效果png是一种采用无损压缩算法的位图格式,其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。

PNG使用无损数据压缩算法,一般应用于JAVA程序、网页中,原因是它压缩比高,生成文件体积小。

PNG可以为原图像定义256个透明层次,使得彩色图像的边缘能与任何背景平滑地融合,从而彻底地消除锯齿边缘。

位图文件(BMP)

位图文件(BMP)

位图⽂件(BMP)位图⽂件简介BMP(Bitmap-File)格式是最常⽤的图像⽂件存取格式之⼀,是微软为其Windows环境设置的标准图像格式,BMP位图⽂件默认的⽂件扩展名是“.BMP”或者“.bmp”,有时它也会以“.DIB”或者“RLE”为扩展名。

⽤BMP格式存放的图像⼏乎可以被所有的图像显⽰软件读取。

BMP图形⽂件是Windows采⽤的图像⽂件格式,在Windows环境下运⾏的所有图像软件都⽀持BMP图像⽂件格式。

Windows系统内部个图像绘制操作都是以BMP为基础的。

Windows3.0以前的BMP⽂件格式与显⽰设备有关,因此把这种BMP图像⽂件格式称为设备相关位图(Device Dependent Bitmap,DDB)⽂件格式。

Windows3.0以后的BMP⽂件都与显⽰设备⽆关,因此把这种BMP⽂件格式称为设备⽆关位图(Device Independent Bitmap,DIB)格式。

BMP⽂件格式摘要每个BMP⽂件只能存放⼀张图像。

图像数据是否采⽤压缩⽅式存放,取决于⽂件的⼤⼩与格式,即压缩处理是BMP图像⽂件的⼀个选项,⽤户可以根据需要进⾏选择。

其中,⾮压缩格式是BMP图像⽂件所采⽤的⼀种通⽤格式,它按照⼀定的顺序忠实的记录图像中每⼀个像素的颜⾊值。

如果⽤户确定将BMP⽂件格式压缩处理,则Windows设计了⼀种压缩⽅式:如果位图为16⾊模式,则采⽤RLE4压缩⽅式,如果图像为256⾊模式,则采⽤RLE8压缩⽅式。

BMP图像数据⽂件格式可以存储为单⾊,16⾊,256⾊和真彩⾊四种图像数据,其数据的排列顺序与⼀般⽂件不同,它以图像的左下⾓作为起点存储图像,⽽不是以图像的坐上⾓为起点。

⽽且BMP图像⽂件格式中还存在另外⼀个与众不同的特点,即其调⾊板数据所采⽤的数据结构中,红,绿,蓝三种基⾊数据的排列顺序也恰好与其他图像⽂件格式相反。

总之,BMP图像⽂件格式拥有许多适合于Windows环境的新特⾊,⽽且随着Windows版本的不断更新,微软也在不断的改进BMP图像⽂件格式。

常见的图片格式有哪几种,各有哪些优点?

常见的图片格式有哪几种,各有哪些优点?

常见的图片格式有哪几种,各有哪些优点?常见的图片格式有哪几种?分别有什么区别?一、图片格式:光栅图片1、BMP:Windows 位图Windows 位图可以用任何颜色深度(从黑白到24 位颜色)存储单个光栅图像。

Windows 位图文件格式与其他Microsoft Windows 程序兼容。

它不支持文件压缩,也不适用于Web 页。

从总体上看,Windows 位图文件格式的缺点超过了它的优点。

为了保证照片图像的质量,请使用PNG 文件、JPEG 文件或TIFF 文件。

BMP 文件适用于Windows 中的墙纸。

优点:*. BMP 支持 1 位到24 位颜色深度。

*. BMP 格式与现有Windows 程序(尤其是较旧的程序)广泛兼容。

缺点:*.BMP 不支持压缩,这会造成文件非常大。

*. BMP 文件不受Web 浏览器支持。

2、PCX:PC 画笔“PC 画笔”图片(也被称为Z-Soft 位图)会以任何颜色深度存储单个光栅图像。

画笔图片更广泛地用于较早的Windows 程序和基于MS-DOS 的程序。

画笔图片与许多较新的程序兼容。

PCX 图片支持“行程长度编码”(RLE) 内部压缩。

优点:*. PCX 在许多基于Windows 的程序和基于MS-DOS 的程序间是标准格式。

*. PCX 支持内部压缩。

缺点:*. PCX 不受Web 浏览器支持。

3、PNG:可移植网络图形PNG 图片以任何颜色深度存储单个光栅图像。

PNG 是与平台无关的格式。

优点:*. PNG 支持高级别无损耗压缩。

*. PNG 支持alpha 通道透明度。

*. PNG 支持伽玛校正。

*. PNG 支持交错。

*. PNG 受最新的Web 浏览器支持。

缺点:较旧的浏览器和程序可能不支持PNG 文件。

*.PNG 作为Internet 文件格式,与JPEG 的有损耗压缩相比,PNG 提供的压缩量较少。

作为Internet 文件格式,PNG 对多图像文件或动画文件不提供任何支持。

JPG、GIF、BMP和PNG

JPG、GIF、BMP和PNG

JPG、GIF、BMP和PNG格式分别是什么意思?BMP格式BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。

随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。

这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。

所以,目前BMP在单机上比较流行。

GIF格式GIF是英文Graphics Interchange Format(图形交换格式)的缩写。

顾名思义,这种格式是用来交换图片的。

事实上也是如此,上世纪80年代,美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出了这种GIF图像格式。

GIF格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。

最初的GIF只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术发展,可以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D动画为数不多的格式之一(称为GIF89a),而在GIF89a图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF风光十足。

目前Internet上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a格式文件。

此外,考虑到网络传输中的实际情况,GIF图像格式还增加了渐显方式,也就是说,在图像传输过程中,用户可以先看到图像的大致轮廓,然后随着传输过程的继续而逐步看清图像中的细节部分,从而适应了用户的"从朦胧到清楚"的观赏心理。

目前Internet上大量采用的彩色动画文件多为这种格式的文件。

GIF格式只能保存最大8位色深的数码图像,所以它最多只能用256色来表现物体,对于色彩复杂的物体它就力不从心了。

尽管如此,这种格式仍在网络上大行其道应用,这和GIF图像文件短小、下载速度快、可用许多具有同样大小的图像文件组成动画等优势是分不开的。

13 BMP、JPG、DICOM文件

13 BMP、JPG、DICOM文件
标记码由两个字节组成,高节0XFF。
(1) 图像开始SOI(Start of Image) 标记结构 字节数 0XFF 1 0XD8 1 可作为JPEG格式的判据(JFIF(JPEG File Interchange Format)还需要APP0的配合)
(7) 扫描线开始SOS(Start of Scan) 标记结构 字节数 意义 0XFF 1 0XDA 1 Ls 2 SOS标记码长度,不包括前两个字节0XFF,0XDA Ns 1 Cs1 1 (Td1,Ta1) 1 Cs2 1 (Td2,Ta2) 1 … CsNs 1 (TdNs,TaNs) 1 Ss 1 Se 1 (Ah,Al) 1 压缩图像数据 Ns为Scan中成分的个数,在基本系统中,Ns=Nf(Frame中成分个数)。CSNs 为在Scan中成分的编号。TdNs为高4位,TaNs为低4位,分别表示DC和AC编码 表的编号。在基本系统中Ss=0,Se=63,Ah=0,Al=0。
(6) 霍夫曼(Huffman)表DHT(Define Huffman Table) 标记结构 0XFF 0XC4 Lh (Tc,Th) L1 L2 … L16 V1 V2 … Vt 字节数 1 1 2 1 1 1 16组数据中,每组个数 1 1 1 每个代码值;t=L1+L2+…L16 1 意义
(4)DRI(Define Restart Interval) 此标记需要用到最小编码单元(MCU,Minimum Coding Unit)的概念。前面提到,Y 分量数据重要,UV分量的数据相对不重要,所以可以只取UV的一部分,以增加压 缩比。目前支持JPEG格式的软件通常提供两种取样方式YUV411和YUV422,其含 义是YUV三个分量的数据取样比例。举例来说,如果Y取四个数据单元,即水平取 样因子Hy乘以垂直取样因子Vy的值为4,而U和V各取一个数据单元,即 Hu×Vu=1,Hv×Vv=1。那么这种部分取样就称为YUV411。

bmp文件格式详解

bmp文件格式详解

BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。

由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源。

Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持。

下面以Notepad++为分析工具,结合Windows的位图数据结构对BMP文件格式进行一个深度的剖析。

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header):提供文件的格式、大小等信息位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表位图数据(bitmap data):就是图像数据啦^_^下面结合Windows结构体的定义,通过一个表来分析这四个部分。

我们一般见到的图像以24位图像为主,即R、G、B三种颜色各用8个bit来表示,这样的图像我们称为真彩色,这种情况下是不需要调色板的,也就是所位图信息头后面紧跟的就是位图数据了。

因此,我们常常见到有这样一种说法:位图文件从文件头开始偏移54个字节就是位图数据了,这其实说的是24或32位图的情况。

这也就解释了我们按照这种程序写出来的程序为什么对某些位图文件没用了。

下面针对一幅特定的图像进行分析,来看看在位图文件中这四个数据段的排布以及组成。

我们使用的图像显示如下:这是一幅16位的位图文件,因此它是含有调色板的。

在拉出图像数据进行分析之前,我们首先进行几个约定:1. 在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据”。

BMP 文档

BMP 文档

BMP格式BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。

随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。

这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。

所以,目前BMP在单机上比较流行。

目录编辑本段简介BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows 环境下运行的所有图象处理软件都支持BMP图象文件格式。

Windows系统内部各图像绘制操作都是以BMP为基础的。

Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。

Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图象。

BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE 作扩展名)。

6.1.2 文件结构位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。

位图文件的组成结构名称符号位图文件头 (bitmap-file header) BITMAPFILEHEADER bmfh位图信息头 (bitmap-information header) BITMAPINFOHEADER bmih 彩色表 (color table) RGBQUAD aColors[]图象数据阵列字节 BYTE aBitmapBits[]位图文件结构可综合在表6-01中。

CAD中的位图导入和编辑控制技巧

CAD中的位图导入和编辑控制技巧

CAD中的位图导入和编辑控制技巧CAD软件作为一种三维设计和建模工具,广泛应用于建筑、工程、汽车设计等行业。

在CAD中,位图的导入和编辑是常见的操作。

本文将介绍CAD中的位图导入和编辑控制技巧,以帮助读者更好地利用CAD软件进行设计和建模工作。

一、位图导入技巧1. 打开CAD软件后,选择“插入”选项卡中的“图像”命令。

在弹出的对话框中,选择要导入的位图文件,并点击“打开”按钮。

CAD软件支持导入多种格式的位图文件,如JPEG、PNG、BMP等。

2. 在导入位图前,可以设置位图的比例。

点击“图像比例”选项卡中的“按比例”按钮,在弹出的对话框中选择合适的比例值,并点击“确定”按钮。

3. 导入位图后,可以根据需要对其进行位置和大小的调整。

选择“移动”或“缩放”命令,点击位图,并按照指示进行操作。

移动指令可以将位图在画布上自由移动,而缩放指令可以调整位图的大小。

二、位图编辑控制技巧1. 选择“编辑”选项卡中的“图像编辑器”命令,可以进入位图编辑模式。

在位图编辑器中,可以对导入的位图进行编辑操作。

2. 位图编辑器提供了一系列编辑工具,如裁剪、旋转、反转、调整亮度和对比度等。

根据实际需求,选择相应的工具进行编辑操作。

3. 裁剪工具可以用来去除位图中不需要的部分。

点击裁剪工具,然后在位图上绘制一个矩形框,裁剪出需要的部分,并点击“完成”按钮。

4. 旋转工具可以将位图旋转到任意角度。

点击旋转工具,然后在位图上点击两个点,定义一个角度,使位图按照指定角度旋转,并点击“完成”按钮。

5. 反转工具可以对位图进行水平或垂直反转。

选择反转工具,点击位图,即可对位图进行相应的反转操作。

6. 调整亮度和对比度工具可以对位图的亮度和对比度进行调整。

选择相应的工具,然后在位图上拖动滑块,即可实时调整位图的亮度和对比度。

三、附加技巧1. 在位图导入和编辑过程中,可以使用CAD软件提供的图层管理功能。

选择“格式”选项卡中的“图层”命令,可以创建新的图层,并将位图放在指定的图层上。

bmp是什么格式

bmp是什么格式

图有关的数据的一种标准,因此在Windows环境中运行的 图形图像软件都支持BMP图像格式。 典型的BMP图像文件由四部分组成: 1:位图
头文件数据结构,它包含BMP图像文件的类型、显示内 容等信息; 2:位图信息数据结构,它包含有BMP图像的宽、高、压 缩方法,以及定义颜色等信
息; 3:调色板,这个部分是可选的,有些位图需要调色板, 有些位图,比如真彩色图(24位的BMP)就不需要调色板; 4:位图数据,这部分的
BMP(全称Bitmap)是Window操作系统中的标准图像文件 格式,可以分成两类:设备相关位图(DDB)和设备无关位 图(DIB),使用非常
广。它采用位映射存储格式,除了图像深度可选以外, 不采用其他任何压缩,因此,BMP文件所占用的空间很 大。BMP文件的图像深度可选lbP文件存储数据时,图像的扫描方式 是按从左到右、从下到上的顺序。由于BMP文件格式是 Windows环境中交换与
内容根据BMP位图使用的位数不同而不同,在24位图中 直接使用RGB,而其他的小于24位的使用调色板中颜色索 引值。 bmp文件怎么打开?
这是WINDOWS的位图文件,使用画笔或者其它的图片查 看器都能打开它。
转载请保留出处,谢谢支持!
网瑞测速 /

位图文件(BMP)格式分析以及程序实现

位图文件(BMP)格式分析以及程序实现

inf.read((char*)&header, sizeof(header));if(header.bfType != 0x4D42)return false;这个很简单,没有什么好说的。

2、加载位图信息头//Load the image information headerBITMAPINFOHEADER infoheader;memset(&infoheader, 0, sizeof(infoheader));inf.read((char*)&infoheader, sizeof(infoheader));m_iImageWidth = infoheader.biWidth;m_iImageHeight = infoheader.biHeight;m_iBitsPerPixel = infoheader.biBitCount;这里我们得到了3各重要的图形属性:宽,高,以及每个像素颜色所占用的位数。

3、行对齐由于Windows在进行行扫描的时候最小的单位为4个字节,所以当图片宽X 每个像素的字节数!= 4的整数倍时要在每行的后面补上缺少的字节,以0填充(一般来说当图像宽度为2的幂时不需要对齐)。

位图文件里的数据在写入的时候已经进行了行对齐,也就是说加载的时候不需要再做行对齐。

但是这样一来图片数据的长度就不是:宽X 高X 每个像素的字节数了,我们需要通过下面的方法计算正确的数据长度://Calculate the image data sizeint iLineByteCnt = (((m_iImageWidth*m_iBitsPerPixel) + 31) >> 5) << 2;m_iImageDataSize = iLineByteCnt * m_iImageHeight;4、加载图片数据对于24位和32位的位图文件,位图数据的偏移量为sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER),也就是说现在我们可以直接读取图像数据了。

位图分类

位图分类

少将一、位图文件结构位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据1、位图文件头。

位图文件头主要用于识别位图文件。

以下是位图文件头结构的定义:typedef struct tagBITMAPFILEHEADER { // bmfhWORD bfType;DWORD bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfOffBits;} BITMAPFILEHEADER;其中的bfType值应该是“BM”(0x4d42),标志该文件是位图文件。

bfSize的值是位图文件的大小。

2、位图信息中所记录的值用于分配内存,设置调色板信息,读取像素值等。

以下是位图信息结构的定义:typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1];} BITMAPINFO;可见位图信息也是由两部分组成的:位图信息头 + 颜色表2.1位图信息头。

位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、高度、目标设备的位平面数、图像的压缩格式。

以下是位图信息头结构的定义: typedef struct tagBITMAPIN FOHEADER{ // bmihDWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCountDWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;} BITMAPINFOHEADER;下表是对结构体当中各个成员的说明:结构成员说明biSize 结构BITMAPINFOHEADER的字节数,即sizeof(BITMAPINFOHEADER)* biWidth以像素为单位的图像宽度*biHeight以像素为单位的图像长度*biplanes目标设备的位平面数biBitCount每个像素的位数*(1)biCompression图像的压缩格式(这个值几乎总是为0)biSizeImage以字节为单位的图像数据的大小(对BI_RGB压缩方式而言)biXPelsPermeter水平方向上的每米的像素个数biYpelsPerMeter垂直方向上的每米的像素个数biClrused调色板中实际使用的颜色数(2)biClrImportant现实位图时必须的颜色数(3)说明:*是需要加以注意的部分,因为它们是我们在进行位图操作时经常参考的变量(1)对于每个像素的字节数,分别有一下意义:0,用在JPEG格式中1,单色图,调色板中含有两种颜色,也就是我们通常说的黑白图片4,16色图8,256色图,通常说的灰度图16,64K图,一般没有调色板,图像数据中每两个字节表示一个像素,5个或6个位表示一个RGB分量24,16M真彩色图,一般没有调色板,图像数据中每3个字节表示一个像素,每个字节表示一个RGB分量32,4G真彩色,一般没有调色板,每4个字节表示一个像素,相对24位真彩图而言,加入了一个透明度,即RGBA模式(2)这个值通常为0,表示使用biBitCount确定的全部颜色,例外是使用的颜色树木小于制定的颜色深度的颜色数目的最大值。

图形文件格式大全

图形文件格式大全

图形文件格式大全一、BMP格式BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。

随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。

这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。

所以,目前BMP在单机上比较流行。

二、GIF格式GIF是英文Graphics Interchange Format(图形交换格式)的缩写。

顾名思义,这种格式是用来交换图片的。

事实上也是如此,上****80年代,美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出了这种GIF图像格式。

GIF格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。

最初的GIF只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术发展,可以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D 动画为数不多的格式之一(称为GIF89a),而在GIF89a图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF风光十足。

目前Internet上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a格式文件。

此外,考虑到网络传输中的实际情况,GIF图像格式还增加了渐显方式,也就是说,在图像传输过程中,用户可以先看到图像的大致轮廓,然后随着传输过程的继续而逐步看清图像中的细节部分,从而适应了用户的"从朦胧到清楚"的观赏心理。

目前Internet上大量采用的彩色动画文件多为这种格式的文件。

但GIF有个小小的缺点,即不能存储超过256色的图像。

尽管如此,这种格式仍在网络上大行其道应用,这和GIF图像文件短小、下载速度快、可用许多具有同样大小的图像文件组成动画等优势是分不开的。

图像文件后缀名大全

图像文件后缀名大全

图像文件后缀大全祁建平整理进入多媒体世界后,大家会看到各种各样精彩的图片,会发现许多种后缀名。

的确,由于各个公司在开发图形有关的软件时都自制标准,导致今日在图形方面有太多的格式,以下就是常见的几种格式:首先是一种位图文件格式,它是一组点(像素)组成的图像,它们由图像程序生成或在扫描图像时创建。

主要有Windows位图(.BMP):由Microsoft公司开发,它被Windows 和Windows NT平台及许多应用程序支持。

支持32位颜色,用于为Windows界面创建图标的资源文件格式,光标(.CUR、.DLL、.EXE):资源文件格式,用于创建Windows界面的光标。

OS/2位图(.BMP):Microsoft公司和IBM开发的位图文件格式。

它为各种操作系统和应用程序所支持。

支持压缩,最大的图像像素为64000×64000。

画笔(.PCX):由Zsoft公司推出,它对图像数据也进行了压缩,可由PCX生成。

用于Windows的画笔。

支持24位颜色,最大图像像素是64000×64000。

支持压缩。

图形交换格式:Graphics Interchage format(.GIF):由Compu Serve创建,它能以任意大小支持图画,通过压缩可节省存储空间,还能将多幅图画存在一个文件中。

支持256色,最大图像像素是64000×64000。

Kodak Photo CD(.PCD):Eastman Kodak所开发的位图文件格式,被所有的平台所支持,PCD支持24位颜色,最大的图像像素是2048×3072,用于在CD-ROM上保存照片。

Adobe Photoshop(.PSD):Adobe Photoshop的位图文件格式,被Macintosh和MS Windows 平台所支持,最大的图像像素是30000×30000,支持压缩,广泛用于商业艺术。

Macintosh绘画(.MAC):Apple公司所开发的位图文件格式。

BMP位图格式详解

BMP位图格式详解

位图格式BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。

它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。

在系统中以BMP为扩展名保存。

打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。

现在讲解BMP的4个组成部分:1.文件头信息块0000-0001 :文件标识,为字母ASCII码“BM”。

0002-0005 :文件大小。

0006-0009 :保留,每字节以“00”填写。

000A-000D :记录图像数据区的起始位置。

各字节的信息含义依次为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)。

2.图像描述信息块000E-0011:图像描述信息块的大小,常为28H。

0012-0015:图像宽度。

0016-0019:图像高度。

001A-001B:图像的plane总数(恒为1)。

001C-001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。

001E-0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。

0022-0025:图像区数据的大小。

0026-0029:水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。

002A-002D:垂直每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写。

002E-0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

3.颜色表颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。

其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。

即首先4字节表示颜色号0的颜色,接下来表示颜色号1的颜色,依此类推。

4.图像数据区颜色表接下来位是位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,既2色图像每点占1位;16色图像每点占4位;256色图像每点占8位;真彩色图像每点占24位。

几种图片格式(压缩标准)介绍:bmp、jpeg、jpeg2000、tiff

几种图片格式(压缩标准)介绍:bmp、jpeg、jpeg2000、tiff

几种图片格式(压缩标准)介绍:bmp、jpeg、jpeg2000、tiff 位图格式(BMP)是一种与硬件设备无关的图像文件格式,使用非常广。

它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP 文件所占用的空间很大。

BMP文件的图像深度可选lbit、4bit、8bit及24bit。

BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。

JPEG是Joint Photographic Experts Group(联合图像专家组)的缩写,文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。

尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。

但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。

而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。

比如可以把1.37Mb的BMP位图文件压缩至20.3KB。

当然也可以在图像质量和文件尺寸之间找到平衡点。

tiff压缩格式 -回复

tiff压缩格式 -回复

tiff压缩格式-回复什么是TIFF压缩格式?TIFF(Tagged Image File Format)是一种常用的位图图像文件格式,最初由Adobe于1986年开发。

与其他位图图像格式不同,TIFF文件格式具有标签属性,可以存储大量的图像元数据,例如颜色空间、位深度、图像压缩方式等信息。

TIFF格式支持多种压缩方式,其中最常见的是LZW 压缩和ZIP压缩。

本文将重点讨论TIFF压缩格式,特别是其原理、优点和缺点。

一、什么是TIFF压缩格式?TIFF格式最初是作为一种无损压缩格式而被开发的,其目的是提供一种高质量的图像文件格式,以便在不牺牲图像质量的情况下节省存储空间。

TIFF 压缩格式主要有两种:LZW压缩和ZIP压缩。

1. LZW压缩LZW(Lempel-Ziv-Welch)是一种无损压缩算法,最初由Abraham Lempel,Jacob Ziv和Terry Welch于1977年提出。

LZW压缩算法通过通过创建一个字典来实现压缩,将重复的数据编码为较短的码字,从而减小文件的大小。

LZW压缩在存储时对文件进行压缩,并在读取时对文件进行解压缩,以便重新生成原始图像。

2. ZIP压缩ZIP压缩是一种常用的有损压缩算法,最初由PKWARE公司于1989年开发。

ZIP压缩算法通过减少图像中的冗余数据和不可察觉的细节来压缩文件大小。

这种压缩方式可以在一定程度上减小文件的尺寸,但会导致图像质量的细微损失。

二、TIFF压缩格式的优点TIFF压缩格式具有许多优点,使其成为广泛应用的图像压缩格式之一。

1. 无损压缩:LZW压缩是一种无损压缩算法,可以避免图像质量的损失。

这对于需要保存高质量图像的领域非常重要,例如医学成像和卫星图像等。

2. 跨平台兼容性:TIFF格式已被广泛支持,并且几乎能在任何操作系统和图像处理软件中使用。

这使得TIFF格式成为跨平台数据交换和存档的理想选择。

3. 多通道支持:TIFF格式可以存储具有多个通道(例如RGB、CMYK等)的图像。

BMP图像存储格式

BMP图像存储格式

维基百科的BMP定义BMP取自位图BitMaP的缩写,也称为DIB(与设备无关的位图),是微软视窗图形子系统(Graphics Device Interface)内部使用的一种位图图形格式,它是微软视窗平台上的一个简单的图形文件格式。

图像通常保存的颜色深度有2(1位)、16(4位)、256(8位)、65536(16位)和1670万(24位)种颜色(其中位是表示每点所用的数据位)。

8位图像可以是索引彩色图像外,也可以是灰阶图像。

表示透明的alpha通道也可以保存在一个类似于灰阶图像的独立文件中。

带有集成的alpha通道的32位版本已经随着Windows XP出现,它在视窗的登录和主题系统中都有使用。

文件大小计算BMP文件通常是不压缩的,所需存储空间比较大。

一个像素所占的字节数为n∕8字节,n是位深。

文件大小可以根据以下公式近似计算:BMP文件大小≈54+4*2n+(width*height*n)∕8;54是位图文件的文件头,4*2n是调色板的大小(对于没有调色板的位图文件,则不存在这一项),最后一项是像素数据。

由于存储算法决定的因素,实际文件大小和计算值可能有细微差别;因此使用的≈符号而不是等于号。

文件存储格式BMP图像自推出以后,几经演进,存储格式也有所变化。

下表详细描述了位图文件可能包含的数据。

结构体名称可选大小用途备注位图文件头否14字节存储位图文件通用信息仅在读取文件时有用DIB头否固定(存在7种不同版本)存储位图详细信息及像素格式紧接在位图文件头后附加位掩码是3或4 DWORD(12或16字节)定义像素格式仅在DIB头是BITMAPINFOHEADER时存在调色板见备注可变定义图像数据(像素数组)所用颜色色深≤ 8时不能省略填充区A是可变结构体对齐位图文件头中像素数组偏移量的产物像素数组否可变定义实际的像素数值像素数据在DIB头和附加位掩码中定义。

像素数组中每行均以4字节对齐填充区B 是可变结构体对齐DIB头中ICC色彩特性数据偏移量的产物ICC色彩特性数据是可变定义色彩特性可以包含外部文件路径,由该文件来定义色彩特性Remark:像素数组每行均以4字节对齐,这会影响我们怎么读取像素数据。

常用的图形图像的格式

常用的图形图像的格式

图形图像文件大致上可以分为两大类:一类为位图文件;另一类称为描绘类、矢量类或面向对象图形图像文件。

前者以点阵形式描述图形图像,后者是以数学方法描述的一种由几何元素组成的图形图像。

一般说来,后者对图像的表达细致、真实,缩放后图形图像的分辨率不变,在专业级的图形图像处理中应用较多。

1、点阵图形图像文件*.bmp(Bitmap)*.bmp是Windows中的标准图像文件格式,已成为PC机Windows系统中事实上的工业标准,有压缩和不压缩两种形式。

它以独立于设备的方法描述位图,可用非压缩格式存储图像数据,解码速度快,支持多种图像的存储,常见的各种P C图形图像软件都能对其进行处理。

在PhotoShop中,最多可以使用16M的色彩渲染bmp图像。

*.dib(Device Independent Bitmap)*.dib是一种类似于*.bmp的图形文件格式,描述图像的能力与*.bmp 基本相同,并且能够运行在多种硬件平台上,只是文件较大。

常见的各种P C图形图像软件都能够对其进行处理。

*.gif(Graphics Interchange Format)*.gif是在各种平台的各种图形处理软件上均能够处理的、经过压缩的一种图形文件格式。

它是可在Macintosh、Amiga、Atati、IBM 机器间进行移植的一种标准位图格式。

该格式由Compuserver 公司创建,存储色彩最高只能达到256种。

在颜色深度和图像大小上,*.gif类似于*.pcx;在结构上,*.gif类似于*.tiff。

正因为它是经过压缩的图像文件格式,所以大多用在网络传输上,速度要比传输其他图像文件格式快得多。

它的最大缺点是最多只能处理2 56种色彩,故不能用于存储真彩色的图像文件,但其GIF89a格式能够存储成背景透明的形式,并且可以将数张图存成一个文件,从而形成动画效果。

*.png (Portable Network Graphics)*.png是一种能存储32位信息的位图文件格式,其图像质量远胜过*.gif。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、位图文件结构位图文件由三部分组成:文件头+ 位图信息+ 位图像素数据1、位图文件头。

位图文件头主要用于识别位图文件。

以下是位图文件头结构的定义:[cpp]view plaincopyprint?1.typedef struct tagBITMAPFILEHEADER { // bmfh2.WORD bfType;3.DWORD bfSize;4.WORD bfReserved1;5.WORD bfReserved2;6.DWORD bfOffBits;7.} BITMAPFILEHEADER;1.typedef struct tagBITMAPINFO {2.BITMAPINFOHEADER bmiHeader;3.RGBQUAD bmiColors[1];4.} BITMAPINFO;[cpp]view plaincopyprint?1.typedef struct tagBITMAPINFOHEADER{ // bmih2.DWORD biSize;3.LONG biWidth;4.LONG biHeight;5.WORD biPlanes;6.WORD biBitCount7.DWORD biCompression;8.DWORD biSizeImage;9.LONG biXPelsPerMeter;10.LONG biYPelsPerMeter;11.DWORD biClrUsed;12.DWORD biClrImportant;13.} BITMAPINFOHEADER;每个像素的位数*(1)biCompression图像的压缩格式(这个值几乎总是为0)biSizeImage以字节为单位的图像数据的大小(对BI_RGB压缩方式而言)biXPelsPermeter水平方向上的每米的像素个数biYpelsPerMeter垂直方向上的每米的像素个数biClrused调色板中实际使用的颜色数(2)biClrImportant现实位图时必须的颜色数(3)说明:*是需要加以注意的部分,因为它们是我们在进行位图操作时经常参考的变量(1)对于每个像素的字节数,分别有一下意义:0,用在JPEG格式中1,单色图,调色板中含有两种颜色,也就是我们通常说的黑白图片4,16色图8,256色图,通常说的灰度图16,64K图,一般没有调色板,图像数据中每两个字节表示一个像素,5个或6个位表示一个RGB分量24,16M真彩色图,一般没有调色板,图像数据中每3个字节表示一个像素,每个字节表示一个RGB分量32,4G真彩色,一般没有调色板,每4个字节表示一个像素,相对24位真彩图而言,加入了一个透明度,即RGBA模式(2)这个值通常为0,表示使用biBitCount确定的全部颜色,例外是使用的颜色数目小于制定的颜色深度的颜色数目的最大值。

(3)这个值通常为0,表示所有的颜色都是必需的2.2颜色表。

颜色表一般是针对16位一下的图像而设置的,对于16位和16位以上的图像,由于其位图像素数据中直接对对应像素的RGB(A)颜色进行描述,因而省却了调色板。

而对于16位一下的图像,由于其位图像素数据中记录的只是调色板索引值,因而需要根据这个索引到调色板去取得相应的RGB(A)颜色。

颜色表的作用就是创建调色板。

下图是带调色板和不带调色板的位图的简单示意图图1 带调色板和不带调色板位图之间的区别颜色表是由颜色表项组成的,颜色表项结构的定义如下:[cpp]view plaincopyprint?1.typedef struct tagRGBQUAD { // rgbq2.BYTE rgbBlue;3.BYTE rgbGreen;4.BYTE rgbRed;5.BYTE rgbReserved;6.} RGBQUAD;1.private:2.DWORD m_dwDibSize;3.CPalette m_Palette;4.int m_nPaletteEntries;5.RGBQUAD *m_pPalette;6.unsigned char *m_pDib, *m_pDibBits;7.BITMAPINFOHEADER *m_pBIH;1.//加载图片2.void CImageDisposeDlg::OnBtnloadimage()3.{4.// TODO: Add your control notification handler code here5.6.//文件路径名称7.CString pszFilename;8.9.//浏览文件对话框10.CFileDialog hFileDlg(TRUE,"bmp",11.NULL,12.OFN_FILEMUSTEXIST|OFN_READONLY|OFN_PATHMUSTEXIST|OFN_NOCHANGEDIR,13.TEXT("BMP (*.bmp)|*.bmp|所有文件(*.*)|*.*|"),14.NULL);15.16.if(hFileDlg.DoModal() == IDOK)17.{18.//获得文件路径名称19.pszFilename=hFileDlg.GetPathName();20.}21.22.//文件类23.CFile cf;24.25.//文件打开失败,程序返回26.if( !cf.Open( pszFilename, CFile::modeRead ) )27.{28.return;29.}30.31.//获得位图信息文件大小32.DWORD dwDibSize;33.dwDibSize = cf.GetLength() - sizeof( BITMAPFILEHEADER );34.35.//申请一块内存存放位图信息36.unsigned char *pDib;37.pDib = new unsigned char [dwDibSize];38.if( pDib == NULL )39.{40.return;41.}42.43.//位图文件头44.BITMAPFILEHEADER BFH;45.46.//从文件读取位图文件头和位图数据47.try{48.// 判断读取位图文件头是否成功49.if( cf.Read( &BFH, sizeof( BITMAPFILEHEADER ) )50.!= sizeof( BITMAPFILEHEADER ) ||51.52.// 判断是否是位图类型53.BFH.bfType != 'MB' ||54.55.// 判断读取位图数据是否成功56.cf.Read( pDib, dwDibSize ) != dwDibSize ){57.58.//释放位图数据指针59.delete [] pDib;60.61.//读取失败,程序返回62.return;63.}64.}65.catch( CFileException *e ){66.e->Delete();67.delete [] pDib;68.return;69.}70.71.//重置全局位图信息指针72.if( m_pDib != NULL )73.{74.delete m_pDib;75.}76.77.//将位图信息指针和位图信息大小赋值给全局变量78.m_pDib = pDib;79.m_dwDibSize = dwDibSize;80.81.//获取位图信息头指针82.m_pBIH = (BITMAPINFOHEADER *) m_pDib;83.84.//获取位图调色板指针85.m_pPalette = (RGBQUAD *) &m_pDib[sizeof(BITMAPINFOHEADER)];86.87.// 计算调色板中实际颜色数量88.m_nPaletteEntries = 1 << m_pBIH->biBitCount;//1左移89.if( m_pBIH->biBitCount > 8 )90.{91.m_nPaletteEntries = 0;92.}93.else if( m_pBIH->biClrUsed != 0 )94.{95.m_nPaletteEntries = m_pBIH->biClrUsed;96.}97.98.// 获取位图数据指针99.m_pDibBits =&m_pDib[sizeof(BITMAPINFOHEADER)+m_nPaletteEntries*sizeof(RGBQUAD)]; 100.101.// 重置全局调色板102.if( m_Palette.GetSafeHandle() != NULL )103.{104.m_Palette.DeleteObject();105.}106.107.//如果调色板颜色数量不为零,则通过逻辑调色板创建调色板108.if( m_nPaletteEntries != 0 ){109.110.//为逻辑调色板分配内存111.LOGPALETTE *pLogPal = (LOGPALETTE *) new char112.[sizeof(LOGPALETTE)+113.m_nPaletteEntries*sizeof(PALETTEENTRY)];114.115.if( pLogPal != NULL ){116.117.//设置逻辑调色板的版本118.pLogPal->palVersion = 0x300;119.//设置逻辑调色板的颜色数量120.pLogPal->palNumEntries = m_nPaletteEntries;121.122.//为每个颜色实体赋颜色值123.for( int i=0; i<m_nPaletteEntries; i++ ){124.pLogPal->palPalEntry[i].peRed =125.m_pPalette[i].rgbRed;126.pLogPal->palPalEntry[i].peGreen =127.m_pPalette[i].rgbGreen;128.pLogPal->palPalEntry[i].peBlue =129.m_pPalette[i].rgbBlue;130.}131.132.//创建调色板133.m_Palette.CreatePalette( pLogPal );134.//释放内存135.delete [] pLogPal;136.}137.}138.//重绘139.Invalidate();140.}1.//保存图片2.void CImageDisposeDlg::OnBtnsave()3.{4.// TODO: Add your control notification handler code here5.//文件路径名称6.CString pszFilename;7.8.//浏览文件对话框9.CFileDialog hFileDlg(FALSE,"bmp",10.NULL,11.OFN_FILEMUSTEXIST|OFN_READONLY|OFN_PATHMUSTEXIST|OFN_NOCHANGEDIR,12.TEXT("BMP (*.bmp)|*.bmp|所有文件(*.*)|*.*|"),13.NULL);14.15.if(hFileDlg.DoModal() == IDOK)16.{17.//获得文件路径名称18.pszFilename=hFileDlg.GetPathName();19.}20.21.// 如果位图信息为空则程序返回22.if( m_pDib == NULL )23.return;24.25.//文件类26.CFile cf;27.28.// 创建文件29.if( !cf.Open( pszFilename,30.CFile::modeCreate | CFile::modeWrite ) )31.return;32.33.// 写入数据34.try{35.36.//创建位图文件头37.BITMAPFILEHEADER BFH;38.memset( &BFH, 0, sizeof( BITMAPFILEHEADER ) );39.BFH.bfType = 'MB';40.BFH.bfSize = sizeof( BITMAPFILEHEADER ) + m_dwDibSize;41.BFH.bfOffBits = sizeof( BITMAPFILEHEADER ) +42.sizeof( BITMAPINFOHEADER ) +43.m_nPaletteEntries * sizeof( RGBQUAD );44.45.//将数据写入文件46.cf.Write( &BFH, sizeof( BITMAPFILEHEADER ) );47.cf.Write( m_pDib, m_dwDibSize );48.}49.catch( CFileException *e ){50.e->Delete();51.return;52.}53.54.}1.void CImageDisposeDlg::OnPaint()2.{3.4.CPaintDC dc(this);5.6.//如果位图信息为空,程序返回7.if( m_pDib == NULL )8.return;9.10.//获得位图宽高11.int nWidth,nHeight;12.nWidth = m_pBIH->biWidth;13.nHeight = m_pBIH->biHeight;14.15.//如果有调色板则使用调色板16.if( m_Palette.GetSafeHandle() != NULL )17.{18.CPalette *pOldPalette;19.pOldPalette = dc.SelectPalette( &m_Palette, FALSE );//选择调色板20.dc.RealizePalette();//实现调色板21.22.//绘图23.StretchDIBits( dc.m_hDC, 0, 0,24.nWidth, nHeight,25.0, 0,26.m_pBIH->biWidth, m_pBIH->biHeight,27.m_pDibBits,28.(BITMAPINFO *) m_pBIH,29.BI_RGB, SRCCOPY );30.31.//恢复调色板32.dc.SelectPalette( pOldPalette, FALSE );33.}34.else//没有调色板,直接绘制35.{36.StretchDIBits( dc.m_hDC, 0, 0,37.nWidth, nHeight,38.0, 0,39.m_pBIH->biWidth, m_pBIH->biHeight,40.m_pDibBits,41.(BITMAPINFO *) m_pBIH,42.BI_RGB, SRCCOPY );43.}44.}头文件Cdib.h[cpp]view plaincopyprint?1.#ifndef __CDIB_H2.#define __CDIB_H3.4.class CDib : public CObject5.{6.public:7.BITMAPFILEHEADER bitmapFileHeader;//位图文件头结构8.BYTE* pDib;//指向位图文件内容的指针9.DWORD size;//位图信息大小10.BITMAPINFO* m_pBitmapInfo;//指向位图信息的指针11.BITMAPINFOHEADER* m_pBitmapInfoHeader;//指向位图信息头的指针12.RGBQUAD* m_pPalette;//指向调色板的指针13.BYTE* m_pData;//指向位图数据的指针14.BOOL m_valid;//判断是否是位图文件15.CPalette m_Palette;//调色板对象16.int m_nPaletteEntries;//调色板颜色数目17.int m_WIDTHBYTES;//字节宽18.public:19.CDib();20.~CDib();21.22.DWORD GetSize();//获得图像数据大小,以字节为单位23.void DrawImage(CPaintDC* dc,int left,int top,int right,int bottom);//绘制图像24.void LoadFile(CString filePath);//加载位图文件25.void SaveFile(CString filePath);//保存位图文件26.};27.28.#endif1.#include "stdafx.h"2.#include "cdib.h"3.#include "windowsx.h"4.#include "math.h"5.#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)6.7.CDib::CDib()8.{9.size=0;//位图信息大小10.}11.12.CDib::~CDib()13.{14.GlobalFreePtr(pDib);//释放内存15.}16.17.//加载位图数据18.void CDib::LoadFile(CString filePath)19.{20.CFile dibFile(filePath, CFile::modeRead);//通过文件路径创建一个文件21.dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));//读取文件头到文件头结构22.if (bitmapFileHeader.bfType == 0x4d42)//判断文件类型是否是位图文件23.{24.DWORD fileLength = dibFile.GetLength();//获得文件大小25.size = fileLength -sizeof(BITMAPFILEHEADER);//获得位图信息大小26.pDib = (BYTE*)GlobalAllocPtr(GMEM_MOVEABLE, size);//分配一大小为size的可移动内存块27.dibFile.Read((void*)pDib, size);//将数据读取到位图信息指针所指向的内存28.dibFile.Close();//关闭位图文件29.30.m_pBitmapInfo = (BITMAPINFO*) pDib;//获取位图信息指针31.m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib;//获取位图信息头指针32.m_pPalette = (RGBQUAD*)(pDib + m_pBitmapInfoHeader->biSize);//获得位图颜色表指针33.34.m_pBitmapInfoHeader->biSizeImage = GetSize();//获得位图数据大小35.36.// 计算调色板中实际颜色数量37.m_nPaletteEntries = 1 << m_pBitmapInfoHeader->biBitCount;//逻辑值38.//实际值39.if( m_pBitmapInfoHeader->biBitCount > 8 )40.{41.m_nPaletteEntries = 0;42.}43.else if( m_pBitmapInfoHeader->biClrUsed != 0 )44.{45.m_nPaletteEntries = m_pBitmapInfoHeader->biClrUsed;46.}47.48.DWORD colorTableSize = m_nPaletteEntries * sizeof(RGBQUAD);//颜色表大小49.m_pData = pDib + m_pBitmapInfoHeader->biSize + colorTableSize;//获得位图数据的指针50.51.if (m_pPalette == (RGBQUAD*)m_pData)//没有调色板的情况52.{53.m_pPalette = NULL;54.}55.else//有调色板的情况,创建调色板对象57.// 重置全局调色板58.if( m_Palette.GetSafeHandle() != NULL )59.{60.m_Palette.DeleteObject();61.}62.63.//为逻辑调色板分配内存,通过逻辑调色板创建调色板64.LOGPALETTE *pLogPal = (LOGPALETTE *) new char65.[sizeof(LOGPALETTE)+66.m_nPaletteEntries*sizeof(PALETTEENTRY)];67.68.if( pLogPal != NULL ){69.70.//设置逻辑调色板的版本71.pLogPal->palVersion = 0x300;72.//设置逻辑调色板的颜色数量73.pLogPal->palNumEntries = m_nPaletteEntries;74.75.//为每个颜色实体赋颜色值76.for( int i=0; i<m_nPaletteEntries; i++ ){77.pLogPal->palPalEntry[i].peRed =78.m_pPalette[i].rgbRed;79.pLogPal->palPalEntry[i].peGreen =80.m_pPalette[i].rgbGreen;81.pLogPal->palPalEntry[i].peBlue =82.m_pPalette[i].rgbBlue;83.}84.85.//创建调色板86.m_Palette.CreatePalette( pLogPal );87.//释放内存88.delete [] pLogPal;89.}90.}92.m_WIDTHBYTES =WIDTHBYTES((m_pBitmapInfoHeader->biWidth)*((DWORD)m_pBitmapInfoHeader->bi BitCount));93.94.m_valid = TRUE;//位图文件读取成功95.}96.else97.{98.m_valid = FALSE;//位图文件读取失败99.}100.}101.102.//获得图像数据大小,以字节为单位103.DWORD CDib::GetSize()104.{105.if (m_pBitmapInfoHeader->biSizeImage != 0)106.{107.return m_pBitmapInfoHeader->biSizeImage;108.}109.else110.{111.returnWIDTHBYTES((m_pBitmapInfoHeader->biWidth)*((DWORD)m_pBitmapInfoHeader->bi BitCount))*m_pBitmapInfoHeader->biHeight;112.}113.}114.115.//保存位图文件116.void CDib::SaveFile(CString filePath)117.{118.CFile dibFile(filePath, CFile::modeCreate|CFile::modeWrite);119.dibFile.Write((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER)); 120.dibFile.Write((void*)pDib, size);121.dibFile.Close();122.}123.124.//绘制图像125.void CDib::DrawImage(CPaintDC* dc,int left,int top,int right,int bottom) 126.{127.//如果有调色板则使用调色板128.if(m_Palette.GetSafeHandle()!=NULL)129.{130.CPalette *pOldPalette;131.pOldPalette = dc->SelectPalette( &m_Palette, FALSE );//选择调色板132.dc->RealizePalette();//实现调色板133.134.//绘图135.StretchDIBits( dc->m_hDC, left, top,136.right,bottom,137.0, 0,138.m_pBitmapInfoHeader->biWidth,m_pBitmapInfoHeader->biHeight,139.m_pData,140.(BITMAPINFO *) m_pBitmapInfo,141.BI_RGB, SRCCOPY );142.143.//恢复调色板144.dc->SelectPalette( pOldPalette, FALSE );145.}146.else//没有调色板,直接绘制147.{148.StretchDIBits( dc->m_hDC, left, top,149.right,bottom,150.0, 0,151.m_pBitmapInfoHeader->biWidth,m_pBitmapInfoHeader->biHeight,152.m_pData,153.(BITMAPINFO *) m_pBitmapInfo,154.BI_RGB, SRCCOPY );155.}156.}。

相关文档
最新文档