C语言软件课程设计(BMP图像显示)-终期报告.docVIP

C语言软件课程设计(BMP图像显示)-终期报告.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言软件课程设计(BMP图像显示)-终期报告

XX大学系 课程设计报告 ( 20-- 2011年度第学期) 名 称: 题 目: 院 系: 班 级:学 号: 学生姓名: 指导教师: 设计周数: 成 绩: 日期:年月日 目 录 1. 设计任务 1 2. 基本思路 1 3. 方案设计 2 3.1 定义文件头和信息头 2 3.2 判断位图颜色深度(或类型) 2 3.3 位图数据分析和显示 3 4. 程序的源代码 6 5. 调试过程中出现的问题及相应解决办法 6 6. 个人体会及建议 7 参考文献 9 设计任务 设计题目任务BMP 文件(支持所有BMP格式) 完成情况基本思路BMP文件头(定义图像文件的类型、长度等的数据结构) BMP信息头 (定义图像颜色格式、图像大小、颜色数等的数据结构) 颜色表(调色板) (定义图像颜色的调色板的数组位图点阵,是定义图像数据的数组)32位和24位无调色板,16位为颜色掩码 定义BMP位图数据(未经压缩的BMP文件中,位图点阵信息是按扫描线从下至上(bottom to top)存储的,即图像的第一个像素值在位图阵列的左下角,最后一个像素值在位图阵列的右上角。对16色位图,每个像素占4位,每个字节存放相邻的两个像素值,高4位存放的第1个像素值在扫描线的前面,低4位存放的第2个像素值在扫描线后面。对256色位图,1个字节存放1个像素值。对24位位图,颜色表为空,位图数据的每3个字节对应1个像素值,32位,颜色表也为空,位图数据的每4个字节对应1个像素值其中每个字节,分别对应该像素值的α、R、G,B值。) 根据BMP文件头和信息头中的提取的数据可以判断位图的颜色深度及压缩类型 不同的图像格式有不同的颜色表示方式,将其解压缩或者转换成对应的像素值,并用画点函数将其显示出来。 方案设计 主要算法说明 定义文件头和信息头 #pragma pack (1)//取消字节对齐 typedef struct //信息头信息 { INT16U bmpfiletype;//文件标识 INT32U filescale;//BMP文件大小 …… }Filehead ; #pragma pack ()//恢复四位字节对齐 …… point = malloc(sizeof(Filehead)); //分配内存 fp=fopen(filename,rb);//打开文件 …… fread(point,sizeof(Filehead),1,fp);//读取文件头和信息头 因为计算机(32位)读取数据时,一般是4个字节一起读取,所以要取消字节对齐,这样在读取时,计算机就会按照我们自己规定的数组长度将数据读进去,然后再恢复4字节对齐。 判断位图颜色深度(或类型) switch (point-bmppix) //判断位图颜色深度(或类型) { case 0x20://32位 case 0x18://24位 case 0x10://16位 …… if(point-bmprletype==0) //1555格式 else if(point-bmprletype==3) …… if(pal16==0xf800)//565模式…… else if(pal16!=0xf800)//4444模式 case 0x08://8位…… if(point-bmprletype==0)//未压缩…… else …… 压缩格式 case 0x04://4位 if(point-bmprletype==0)//未压缩 else if(point-bmprletype==2)//压缩格式 case 0x01://1位 位图数据分析和显示 无调色板,以24位为例: GFMDrawRectangle(0,0,720,580, 0xff000000, 1); //创建黑色画布 z=(4-(point-bmpwidth*3)%4)%4; //z为调整位图宽度的参数 for(y=point-bmpheight;y0;y--) { for(x=0;xpoint-bmpwidth;x++) { fread(color,3,1,fp); //读取位图数据,三个字节表示一个像素点 GFMSetPixels(color,x,y,1); //画点 } for(x=0;xz;x++) //跳过多余的数据 fread(color,1,1,fp); } break; 有调色板,以16位为例: if(point-bmprletype==0) //1555格式, { GFMDrawRectangle(0,0,720,580,

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档