首页 > 编程知识 正文

图像处理电脑推荐,c++图像处理库

时间:2023-05-03 12:10:30 阅读:62836 作者:2981

Visual C 2019中的MFC图像处理程序(1) 1.1位图文件及其c操作Windows操作系统使用最多的图形文件格式是位图格式,也是最常见的位图文件格式BMP是英文位图(Bitmap )的缩写,这种格式的特点是包含丰富的图像信息和很少压缩,因此磁盘空间大。 接下来,对使用Visual C处理BMP文件进行说明。

1.1.1 设备无关位图

由于Windows3.0及更高版本的BMP位图文件格式的斗鱼显示设备无关,因此将该BMP位图文件称为设备无关位图(设备独立位图,DIB )。 因为DIB有颜色信息,所以调色板的管理非常简单。

1.1.2 BMP图像文件数据结构

典型的BMP图像文件由以下四部分组成,如下图所示。

位图文件的头数据结构bitmap文件头。 包含BMP图像文件的类型、显示内容等信息。 位图信息头部的数据结构BITMAPINFOHEADER包括诸如BMP图像的宽度、高度、压缩方法和颜色定义之类的信息。 调色板,也就是颜色索引表。 实际位图数据。 分别介绍BMP图像文件的这四个部分。

位图文件的头BITMAPFILEHEADER结构

位图文件的标头BITMAPFILEHEADER的定义位于MFC库。 此标头包含位图的图像文件布局,与位图文件的类型、大小和设备无关。 BITMAPFILEHEADER结构体的长度是固定的,其定义和记述如下。 typedefstructtagbitmapfileheader { wordbftype; 指定//文件类型,然后单击“BM”(0x4d 42 ) DWORD bfSize; 指定以字节表示WORD bfReserved1的位图文件的大小; //保留字必须为0WORD bfReserved2保留字必须为0DWORD bfOffBits以字节为单位指定从实际图像数据到文件头开头的偏移} bitmap fill

BITMAPINFOHEADER结构包含与设备无关的位图的颜色维度和颜色格式的信息,其定义和说明如下: typedefstructtagbitmapinfoheader { dwordbisize; //本结构体占用的尺寸。 单位为字节长字节宽; //位图图像的宽度,单位为像素长字节; //位图图像的高度,单位为像素WORD biPlanes; //装置上的彩色平面的数目必须是一个1WORD biBitCount; DWORD biCompression,存储每个像素使用的二进制位数; //是否压缩保存图像数据DWORD biSizeImage; //指定图像的大小(以字节为单位) (LONG biXPelsPerMeter; //图像的水平分辨率,单位为每米像素长二进制像素参数; //图像的垂直分辨率,单位为每米的像素DWORD biClrUsed //图像实际使用了颜色索引表中的什么颜色DWORD biClrImportant; //图像中的重要颜色数,如果该值为0,则认为所有颜色都很重要} BITMAPINFOHEADER,*PBITMAPINFOHEADER重要成员参数解释:

biBitCount指定每个像素使用的二进制数据的位数,并间接确定图像中可能存在的最大颜色数。 优选: 1、4、8、16、24、32。 biBitCount成员可用于确定位图图像中每个像素所占的数据长度(单位为位)以及图像中包含的最大颜色数。 此成员的值可以是6个,分别与BMP图像允许的6种颜色模式相对应。 BMP文件的颜色深度(即每个像素使用的位数:1(单色(,4 ) 16色)、8 ) 256色)、16 ) 64k色、高颜色)、24 ) 16m色、实颜色)、32 ) 4096m色它们与biBitCount的对应关系如下。

)1)biBitCount=1,位图图像为单色,成员bmiColors索引表包含两个条目。 位图图像数组中的每个数据位表示一个像素。 如果此数据位为0,则使用bmiColors索引表中的第一种颜色显示此像素。 如果此数据位为1,则使用bmiColors索引表中的第二种颜色显示此像素。

)2)biBitCount=4,位图图像最多包含16种颜色,成员bmiColors索引表最多包含16个项目。 此时,位图图像数据区域的各像素条目的长度为4位(0.5字节)。 例如,如果位图图像数据区域的第一个字节的值为0x1F,则该字节表示2像素的颜色,第一个像素是索引表的第二种颜色,第二个像素是索引表的第十六种颜色。

)3)biBitCount=8,位图图像最多

包含256种颜色,并且成员bmiColors索引表中至多包含256个条目。在这种情况下,位图图像数据区中的每个字节代表一个像素的图像数据。
(4) biBitCount=16,位图图像最多包含216种颜色,并且 BITMAPINFOHEADER 的biCompression成员取值必须为BI_BITFIELDS。此时bmiColors成员包含3个DWORD类型的颜色掩码,分别用以指定每个像素的红、绿、蓝是颜色成分。
(5) biBitCount=24,位图图像最多包含224种颜色,并且成员bmiColors索引表为空(NULL)。在位图图像数据区中的每个三比特组中的数据表示某个像素中红、绿、蓝颜色成分的相对强度。
(6) biBitCount=32,位图图像最多包含232种颜色,BITMAPINFOHEADER的biCompression成员必须是BI_BITFIELDS,bmiColors成员包含3个DWORD类型的颜色掩码,分别用以指定每个像素的红、绿、蓝是颜色成分。biSizeImage 指定图像的大小(以字节为单位)。biSizeImage=biWidth‘×biHeight。其中,biWidth’是图像每行占用的字节数,与实际宽度biWidth不同,biWidth’必须是4的整数倍,即大于或等于biWidth,最接近4的整数倍。例如,biWidth=400,则biWidth’=400;如果biWidth=401,则biWidth’=404。如果biCompression为BI_RGB,该项可能为零。biClrUsed成员指定位图图像中实际使用的颜色数目。如果biClrUsed成员被设置为零,则图像中实际使用的颜色数目是和biBitCount成员中规定的值相同的最大数目。

接下来介绍调色板结构。

调色板结构
有些位图如索引图像需要调色板(Palette),有些像真彩色图则不需要,它们的BITMAPINFOHEADER后面直接是位图数据。
调色板实际上是一个RGBQUAD型的数组,该数组总共有biClrUsed个元素(如果biClrUsed等于0,则有2biBitCount个元素。)RGBQUAD是一个用于存储RGB颜色数据的4个字节的结构体,其定义为: typedef struct tagRGBQUAD {BYTE rgbBlue; //该颜色的蓝色分量BYTE rgbGreen; //该颜色的绿色分量BYTE rgbRed; //该颜色的红色分量BYTE rgbReserved; //保留值} RGBQUAD 实际位图数据
实际位图数据是一片连续的存储区域,其中保存着图像中每个像素的灰度(颜色)信息。对于256色灰度图像,图像数据就是该像素的实际灰度,1个像素需要1个字节来表示;对于索引图像,图像数据就是该像素颜色在调色板中的索引值;而对于真彩色图,图像数据就是实际的RGB值,1个像素需要3个字节来表示。

Tips:一般来说,BMP文件中实际位图数据的读取顺序是从下到上、从左到右。位图数据每一行占的字节数必须是4的整数倍,如果不是,则需要补齐。

综上所述:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。