(转)vc图像处理入门之一

本文介绍了Windows位图的基础知识,包括位图的存储方式、位图文件头和信息头结构,强调了位图数据每行需是4的倍数的重要性,并简述了调色板和实际位图数据区的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像编程基础

1、  有关位图

有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用RGB三个

分量表示,因为每个分量有256个级别,要用8位即一个字节来表示,所以每个象素需要用

3个字节。整个图象要用200*200*3,约120k字节。

    这幅图中最多只有16种颜色,我们可以用一个表:表中的每一行记录一种颜色的RGB值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第0行为25500(红色),那么当某个象素为红色时,只需要标明0即可。

    再来计算一下:16种状态可以用4位表示,所以一个象素要用半个字节。整个图象要用200*200*0.5,约20k字节,再加上表占用的字节为3*16=48字节.整个占用的字节数约为前面的1/6

2Windows位图结构

3、位图头文件的结构

第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下:

       typedef struct tagBITMAPFILEHEADER{

       WORD    bfType;

       DWORD bfSize;指定文件大小(包括这14个字节)

       WORD    bfReserved1;

       WORD    bfReserved2;

       DWORD bfOffBits;(从文件头到数据区的偏移量)

       }     BITMAPFILEHEADER;

这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数)

4、位图信息头的结构

第二部分为位图信息头BITMAPINFOHEADER,其主要字段如下:

       typedef struct tagBITMAPINFOHEADER{

       DWORD biSize;指定这个结构的长度,为40

       LONG     biWidth;指定图象的宽度,单位是象素

       LONG     biHeight;

       WORD    biBitCount;颜色的位数,一般为14824

       DWORD biSizeImage;

       }     BITMAPINFOHEADER;

这个结构的长度是固定的,为40个字节(WORD为无符号16位整数,DWORD无符

32位整数,LONG32位整数)

biSizeImage字段

指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:

              biSizeImage=biWidth *biHeight

要注意的是:上述公式中的biWidth‘必须是4的整倍数(所以不是biWidth,而是biWidth‘ ,表示大于或等于biWidth的,离4最近的整倍数。举个例子,如果biWidth=240,则biWidth‘ =240;如果biWidth=241biWidth‘ =244

一定要注意:每行所占字节长度始终是4的倍数,或者每行所占位长度是32的倍数。如果不是,则需要补齐

5、调色板

调色板实际上是一个四元数组,则有2iBitCount次方个元素)。数组中每个元素的类

型是一个RGBQUAD结构,占4个字节.

typedef struct tagRGBQUAD{

       BYTE            rgbBlue;  //蓝色分量

       BYTE            rgbGreen;       //绿色分量

       BYTE            rgbRed;   //红色分量

       BYTE            rgbReserved; //保留值

       }     RGBQUAD;
注意:24位真彩色图中没有调色板数据

6、实际的位图数据区

第四部分就是实际的图象数据了。

对于用到调色板的位图,图象数据就是该像素颜在调色板中的索引值

对于真彩色图,图象数据就是实际的R,G,B值。下面就2色,16色,256色位图和真彩

色位图分别介绍。

对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。

       对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素。

       对于256色位图,一个字节刚好可以表示1个像素。

       对于真彩色图,三个字节才能表示1个像素。

BMP文件的数据从下到上,从左到右的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值