BMP 的编码与解码

本文介绍了BMP文件的解析和编码过程,强调了DWORD对齐的重要性。在解析过程中,重点关注文件格式和扫描行对齐。对于24位BMP,编码相对简单,直接写入像素值。8位BMP编码的难点在于生成调色板,通过K-MEANS算法确定最常用的256种颜色。对于4位和1位BMP,方法类似,1位BMP的调色板仅包含黑白两色。
摘要由CSDN通过智能技术生成

bmp的解析:

                 bmp的解析比较简单,参考bmp的文件格式几个正确的将bmp文件解析出来,只是要注意:每一扫描行的字节数必需是4的整倍数,也就是DWORD对齐的。如果你想确保图像的扫描行DWORD对齐可使用下面的代码:(((width*biBitCount)+31)>>5)<<2。

bmp的编码:

                  对于24位bmp编码难度不大,因为没有调色板,所以直接将内存内的像素值按bmp的文件格式写入即可。

                 对于8位bmp编码,主要的困难是产生调色板,调色板有了,直接将数据区的像素定位到调色板的像素即可。调色板的生成主要有两步:一 分别取rgb的高四位(或5位),合并为一个word,对图像的每个像素都如此处理。二 参见聚类算法的K-MEANS算法对处理过后的图像数据处理取得调色板和图像像素在调色板中的index。细说下第二步:由于第一步的处理,图像像素最多覆盖2的(4*3)次方个色,即4096,统计这4096色在图像出现的次数;将这4096色按是用次数排序;统计使用的颜色,次数大于0为是用过;将前256色(使用的颜色》256)写入调色板;图像中的像素的index是该像素与调色板中的像素差距最小的那个。

C++ 代码如下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值