BMP图片格式转换-多核程序设计作业笔记

来源:互联网 发布:咸阳广电网络客服热线 编辑:程序博客网 时间:2024/05/22 17:13

    《基于多核的并行程序设计》——宋健建老师的课程很精彩,很实用,虽然作业多,书本厚,但是上下来学了不少东西。

     第五次作业题目:将24位真彩色的非压缩图转换为8位灰度图,将8位灰度图转化为1位黑白图。同时实现串行和并行版本。

    关于BMP文件的格式网上太多了。但是以下几点是我自己费了很大精力才知道:

    1.24位BMP文件每个像素三个字节,分别是:B,G,R,8位BMP文件每个像素一个字节,0-255.8位的增加了颜色表(调色板)。该颜色表含 256个RGBGRUD元素。每个元素四个字节。1位的每8个像素一个字节,颜色表含两个RGBGRUB元素。元素0的颜色都是0,元素1的颜色都是 255.当然,2,4,16位(无颜色表)依此类推。

    BUG: 开始以为1位黑白图的颜色表元素1的颜色都是1.所以全显示黑色。

    2.由于BMP文件头结构中的元素大小不一样,有的是WORD,有的是DWORD。所以编译器会进行内存对齐(Memory Alignment)的优化,以便更快读取数据。所以整个结构读入然后每个元素得到的值就不是本来的值。最好一个个元素的读取。

    3.sizeof(BMPFILEHEADER),sizeof得到的结构大小也会因为平台而不同。比如我在Linux上得到这个大小为16,但是实际上是14.

原创粉丝点击