c语言软件课程设计(bmp图像显示)

c语言软件课程设计(bmp图像显示)

ID:12778292

大小:87.50 KB

页数:12页

时间:2018-07-19

c语言软件课程设计(bmp图像显示)_第1页
c语言软件课程设计(bmp图像显示)_第2页
c语言软件课程设计(bmp图像显示)_第3页
c语言软件课程设计(bmp图像显示)_第4页
c语言软件课程设计(bmp图像显示)_第5页
资源描述:

《c语言软件课程设计(bmp图像显示)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、XX大学XX系课程设计报告(2016--2017年度第2学期)名称:软件课程设计题目:BMP图象分析与显示院系:班级:学号:学生姓名:指导教师:成绩:日期:2017年6月4日10目录1.设计任务12.基本思路13.方案设计23.1定义文件头和信息头23.2判断位图颜色深度(或类型)23.3位图数据分析和显示34.程序的源代码65.调试过程中出现的问题及相应解决办法66.个人体会及建议7参考文献9101.设计任务1)设计题目:BMP图象分析与显示2)设计任务:在提供的画布上循环的显示某一文件夹下面所有的BMP文件(支持所有BMP格式)3)完成情况

2、:所有的图片均能正常显示(包括新添的图片),尝试在32位图片上做了几种特效,效果还行,但仍需进一步改进。2.基本思路BMP文件是标准的Windows位图文件,有1位、16色(4位)、256色(8位)、16位真彩色及24位真彩色,32位等格式。一般BMP文件可以看成4个部分组成:1)BMP文件头(定义图像文件的类型、长度等的数据结构)2)BMP信息头(定义图像颜色格式、图像大小、颜色数等的数据结构)3)颜色表(调色板)(定义图像颜色的调色板的数组位图点阵,是定义图像数据的数组)32位和24位无调色板,16位为颜色掩码4)定义BMP位图数据(未经压

3、缩的BMP文件中,位图点阵信息是按扫描线从下至上(bottomtotop)存储的,即图像的第一个像素值在位图阵列的左下角,最后一个像素值在位图阵列的右上角。对16色位图,每个像素占4位,每个字节存放相邻的两个像素值,高4位存放的第1个像素值在扫描线的前面,低4位存放的第2个像素值在扫描线后面。对256色位图,1个字节存放1个像素值。对24位位图,颜色表为空,位图数据的每3个字节对应1个像素值,32位,颜色表也为空,位图数据的每4个字节对应1个像素值其中每个字节,分别对应该像素值的α、R、G,B值。)根据BMP文件头和信息头中的提取的数据可以判断

4、位图的颜色深度及压缩类型不同的图像格式有不同的颜色表示方式,将其解压缩或者转换成对应的像素值,并用画点函数将其显示出来。101.方案设计读取位图数据,做相应处理,画点主要算法说明:整体程序流程判断位图深度及压缩类型读取文件头和信息头3.1定义文件头和信息头#pragmapack(1)//取消字节对齐typedefstruct//信息头信息{INT16Ubmpfiletype;//文件标识INT32Ufilescale;//BMP文件大小……}Filehead;#pragmapack()//恢复四位字节对齐……point=malloc(sizeo

5、f(Filehead));//分配内存fp=fopen(filename,"rb");//打开文件……fread(point,sizeof(Filehead),1,fp);//读取文件头和信息头因为计算机(32位)读取数据时,一般是4个字节一起读取,所以要取消字节对齐,这样在读取时,计算机就会按照我们自己规定的数组长度将数据读进去,然后再恢复4字节对齐。3.2判断位图颜色深度(或类型)switch(point->bmppix)//判断位图颜色深度(或类型){case0x20://32位case0x18://24位case0x10://16位……

6、10if(point->bmprletype==0)//1555格式elseif(point->bmprletype==3)……if(pal16==0xf800)//565模式……elseif(pal16!=0xf800)//4444模式case0x08://8位……if(point->bmprletype==0)//未压缩……else……压缩格式case0x04://4位if(point->bmprletype==0)//未压缩elseif(point->bmprletype==2)//压缩格式case0x01://1位3.1位图数据分析和显

7、示1)无调色板,以24位为例:GFMDrawRectangle(0,0,720,580,0xff000000,1);//创建黑色画布z=(4-(point->bmpwidth*3)%4)%4;//z为调整位图宽度的参数for(y=point->bmpheight;y>0;y--){for(x=0;xbmpwidth;x++){fread(&color,3,1,fp);//读取位图数据,三个字节表示一个像素点GFMSetPixels(color,x,y,1);//画点}for(x=0;x

8、&color,1,1,fp);}break;2)有调色板,以16位为例:if(point->bmprletype==0)//1555格式,{10GFM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。