Bmp位图文件

bmp文件包含了 位图文件头  位图信息头  颜色数据

显卡能直接显示bmp文件,显示其他类型的文件必须要经过一个解码过程 

这里简单介绍一下行程编码压缩法 (网络传输过程中 数据越小越好 又能让人能看得懂你的意思)

基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据快采用的压缩策略是用一个字节(我们称之为数据重数属性)表示数据块重复的次数,然后在这个数据重数属性字节后面存储对应的数据字节本身(此思想来自网络(不过和我的想法差不多))

举个例子: AAAAAAAABBCCCCC 压缩后便成为了8A2B5C

转到我们的bmp的思路来讲一下位图文件:

(1.简单来说文件头是一个结构体 Bitmapfileheader)查看我们的MSDN可以看到这个结构体的内容

解释一下源代码
成员有五个<pre name="code" class="cpp">//WORD    其实是typedef unsigned short WORD类型 
//DWORD   其实是typedef unsigned long DWORD类型
typedef struct tagBITMAPFILEHEADER { 
  WORD    bfType;  //一定是'B' 'M' 分别是 bm 代表的bmp的文件标志
  DWORD   bfSize; //文件的总大小(从bfsize开始计算)
  WORD    bfReserved1; //文件的保留成员1
  WORD    bfReserved2; //文件的保留成员2
  DWORD   bfOffBits; //颜色数据的起始字节
} BITMAPFILEHEADER, *PBITMAPFILEHEADER; 

我也来举一个例子

那么文件头我们分析完了我们来分析一下信息头

BITMAPINFOHEADER(信息头) 

typedef struct tagBITMAPINFOHEADER{
  DWORD  biSize;  //本结构体大小 差不多是40
  LONG   biWidth; //位图像素宽度
  LONG   biHeight; //位图像素高度
  WORD   biPlanes; //调色板 24 bitmap 为 1
  WORD   biBitCount; //表示1像素的位数 
  DWORD  biCompression; //是否压缩 24位位图是0
  DWORD  biSizeImage; //颜色数据总大小一般为0主要用于如果是经过压缩的位图 则本成员有效
//为什么要隔开 因为下面4个都可以填0 因为在显示器用不到这个
  LONG   biXPelsPerMeter; //x方向每米有几个像素
  LONG   biYPelsPerMeter; //y方向每米有几个像素
  DWORD  biClrUsed; //使用的颜色是数量
  DWORD  biClrImportant; //使用的重要颜色数量
} BITMAPINFOHEADER, *PBITMAPINFOHEADER; 
接下来就是咱们的颜色数据

 

这就是基本的bmp介绍!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值