没有合适的资源?快使用搜索试试~ 我知道了~
软件课程设计-C语言实现BMP图像显示.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 74 浏览量
2022-07-03
06:19:41
上传
评论
收藏 1.62MB DOC 举报
温馨提示
试读
29页
软件课程设计-C语言实现BMP图像显示
资源推荐
资源详情
资源评论
1
xx 大学 XX 系
课程设计报告(最终报告)
( 2010 -- 2011 年度第 2 学期)
名 称: 软件课程设计
题 目:BMP 图象分析与显示
院 系:
班 级:
学 号:
学生姓名:
指导教师:
设计周数: 15
成 绩:
日期: 2011 年 5 月 31 日
2
目 录
1. 设计任务.........................................................................................................1
2. 基本思路.........................................................................................................2
3. 方案设计.........................................................................................................2
3.1 主要算法说明........................................................................................2
3.2 程序框架设计........................................................................................9
4. 程序的部分源代码分析及介绍...................................................................14
5. 调试过程中出现的问题及相应解决办法...................................................18
6. 个人体会及建议...........................................................................................26
7. 参考文献.......................................................................................................27
1
1. 设计任务
1.1 利用 C 语言实现 BMP 格式图象文件的分析和显示。主要内容包括:
a)基本任务:完成 BMP 格式图像的显示,要求在提供的画布上循环的显示某一文
件夹下面所有的 BMP 文件(支持所有 BMP 格式);
b)拓展任务:实现图像的特效显示(淡入淡出,百页窗等等)。
1.2 进度情况:
A、我对 BMP 图像的了解
BMP 文件是标准的 Windows 位图文件,有 16 色、256 色、16 位真彩色及 24 位
真彩色等格式。客观存在按文件头、图像控制信息、彩色表和位图点阵数据的格
式来存储。文件头是定义图像文件的类型、长度等的数据结构:图像控制信息是
定义图像颜色格式、图像大小、颜色数等的数据结构:彩色表是定义图像颜色的
调色板的数组位图点阵,是定义图像数据的数组。
未经压缩的 BMP 文件中,位图点阵信息是按扫描线从下至上(bottom to top)存储
的,即图像的第一个像素值在位图阵列的左下角,最后一个像素值在位图阵列的
右上角。对 16 色位图,每个像素占 4 位,每个字节存放相邻的两个像素值,高 4
位存放的第 1 个像素值在扫描线的前面,低 4 位存放的第 2 个像素值在扫描线后
面。对 256 色位图,1 个字节存放 1 个像素值。对 24 位位图,颜色表为空,位图
数据的每 3 个字节对应 1 个像素值,其中每个字节分别对应该像素值的 P、R、G
值。
B、我对于 BMP 图像显示平台的理解
1、通过 enum{}来对各个按键(向上,向下,向左右等)作出定义
2、定义结构体 T_Message,用于接收和发出信号,来控制各个函数的进度。
3、创建消息队列,用于控制各个程序的进度(即决定什么时候开始或者结束它
的进程)
4、定义结构体变量 T_Message RecvMsg,用于接收从队列中发出的消息。
5、利用函数 DTOS_DRV_ReceiveMessage( Test_queueID, &RecvMsg),根据其中
2
RecvMsg.param0 的数值来决定是否进行这个进度。若 RecvMsg.param0 等于
MSG_KeyRIGHT,则进行图像显示程序,获取图像名称,调用图像显示函数,
对图像进行分析和显示;否则跳出循环。
C、已能够正确显示 32bit,24bit,1bit,4bit(未压缩),8bit(未压缩),4bit(压
缩),8bit(压缩),16bit(1555 模式,565 模式,4444 模式)的图像。
2. 基本思路
通过查阅资料和自己的思考,猜想,我觉得要实现在画布上显示 BMP 图像,主要有以
下几种方法
Ⅰ 最初的想法是可以利用描点函数 GFMSetPixels,逐个显示出 BMP 图像的点,最
终构成一幅完整的图像。具体编码后,证实这是可行的。
Ⅱ 查阅一些资料后,我了解到还可以利用粘贴函数 GFMWriteRectangle。即将图像
文件中的数据读取出来,用 malloc 动态分配内存,记录图像数据,然后将内存中数据拷
贝到画布上的一个矩形框内,即实现了图像的显示。但是继续研究之后发现,这个方法
涉及到将 1,4,8,16,24bit 图像数据修改为 32bit 的问题,比较复杂,所以最终还是
采用了方案Ⅰ。
3. 方案设计
3.1 主要算法说明:
主要方法 :将 不同 像素 的图 像分 别用 不同 的函 数实 现, 即分 别定 义 show1bit,
show4bit,……show32bit 等几个函数,再定义函数 showbmp,按照需要显示的图像
像素,决定调用相应的图像显示函数。这么做可以使结构比较清晰,增强代码的可
读性。
具体实现方法:
Ⅰ定义信息头结构变量(其中变量包含 BMP 图像的文件头和信息头:文件标识“BM”,
文件大小,保留位,数据偏移,信息头长度,宽度,高度,面数,像素的位数,压缩
类型,位图数据大小,水平分辨率,垂直分辨率,颜色数,重要颜色)
Ⅱ定义函数,读取文件头和信息头
Ⅲ定义各个像素 BMP 图像的显示函数
3
ⅰ32bit BMP 图像的显示函数
⑴定义文件指针
⑵用 fopen 打开图像文件
⑶利用 fseek 函数将文件内部指针移到位图数据区,跳过信息头部分
⑷用 fread 函数将颜色信息读取出来,存放在 INT32U 型的变量 color 中
⑸调用画点函数 GFMSetPixels,把 color 中的颜色信息显示在画布上
⑹利用双重循环,依次逐行读取颜色信息,显示在画布上
⑺显示结束,用 fclose 关闭文件
ⅱ24bit BMP 图像的显示函数
由于 24bit 图像和 32bit 图像一样,都没用调色板,所以实现过程相似,但有一点
不同:
因为 24bit 的颜色信息占据 3 个字节,而 32bit 的颜色信息为 4 个字节,故利用 fread
函数读取颜色信息时,参数有所不同。
32bit:fread(&color,4,1,fp);
24bit:fread(&color,3,1,fp):
ⅲ 8bit 未压缩 BMP 图像的显示函数
由于 8bit 图像有调色板,故应当先定义数组来存放调色板的数据,然后在读取位图
数据时,将数据对应的调色板颜色找出来,作为 GFMSetPixels 的颜色参数,描出一个
点。
⑴定义文件指针
⑵定义存放调色板颜色数据的数组 colorboard[256],定义循环变量 i,j 和颜色变
量 color 等
⑶用 fopen 打开图像文件
⑷利用 fseek 函数将文件内部指针移到调色板数据区,跳过信息头部分
⑸使用 for 循环,调用 fread 函数读出调色板数据放入数组 colorboard[256]中:
fread(&colorboard[i],4,1,fp);
⑹注意用 rewind(fp)重新定位指针到文件首部
⑺重新使用 fseek 函数跳过信息头和调色板数据
剩余28页未读,继续阅读
资源评论
oligaga
- 粉丝: 52
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 批量word文件内容替换工具1.0 (批量实现多个 Word 文档文件文字替换利器).exe
- Cartoon GUI Pack 1.2.zip
- 【数据集和代码】基于加速度传感器的步态识别行人分类实验(可做步态识别)
- 我分享个魔兽内存修改器
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(优秀项目).zip
- mp3 idv2,idv1,frame分析工具
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(高分项目).zip
- 人工兔优化算法ARO MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
- 人才网站设计-asp.net+sql-(系统源码)
- asp.net+sql人才网站设计-含系统源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功