BItmap 灰度颜色修改

来源:互联网 发布:网络黑白 编辑:程序博客网 时间:2024/05/22 14:19

 bmp 图片灰度值修改显示.
原计划是将8bits 256色灰度图片改为2bits 4色度的灰度图片.无奈能力有限,对MFC 也不

懂,网上down的代码也没有这样的功能,只有现改. 颜色改成4灰度后,并且已经创建新图片

文件成功,但是打开图片始终提示的是"invalid...."不能成像.
报告boss后,被balabala....批评,又是"you don't know". 先完成第一步: 将图片改为4

色显示.

bmp图片文件包括: 文件头:BITMAPFILEHEADER; 包含文件大小,数据偏移量等信息.
                 bitmap 图片信息:1.BITMAPINFO.包含bitmap headerInfo,如高,

宽,bit位,颜色个数等值; 2.调色板(颜色表).
                 bitmap data, 在头文件后就是文件的数据信息了.文件头中的偏移量

标志数据的起始位置.

关于文件颜色表和data的关系:
data中的每个byte都保存着图片像素点颜色信息:

8bits图片来说,总共有256色,0~255为index, 每个像素点的byte值就是颜色表中每个颜

色的index.
4bits图片:16色, data中1byte要保存两个piexl的颜色index.低位的保存在byte高位.
1bits图片:2色,  data中1byte要保存8个piexl的颜色index.低位的保存在byte高位.

data数据中的byte与颜色表mapping.


256色改为4色显示,采用两种方式来测试:
第一种直接设置值:
1. 直接用0,85,170,255 4色来设置颜色域,保存为colortable的值.
2. 扫描图像的每个像素点得到当前像素点的rgb值,灰度图片的rgb中的r,g,b一样
3. 用得到的rgb值与colortable中的4个颜色比较,取abs小的值为当前像素点值.
成像效果和原图类似.

第二种图像抖动处理:
从网上找了个dephi的抖动处理代码修改.
1.扫描图像,得到8bits图像中颜色信息,并且同时计算每种颜色使用的time.
2.对颜色使用times进行排序,这里采用:快速排序算法;
3.取使用频率最高的4色保存到colortable;
4.和第一种方法中3一样.
成像效果和原图差距较大.但是显示对比没有第一种强