C语言软件课程设计(BMP图像显示)
XX大学系
课程设计报告
( 20-- 2017年度第学期)
名 称: 题 目:
院 系:
班 级:学 号: 学生姓名: 指导教师:
成 绩:
日期:年月日
目 录
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, 0xff00
您可能关注的文档
- 新人教版八年级下英语各单元复习提纲.doc
- 门店合伙人方案及月绩效方案.doc
- HT66F018PTMIR载波功能程序范例.pdf
- KUKA-机器人培训教材.ppt
- HIS数据库表结构.doc
- each、every,Ceither的区别、用法、详细解答、练习及练习详.doc
- DAC128S085中文资料.pdf
- c语言图书管理系统课程设计报告.doc
- FX2LP入门手册.pdf
- CAD快捷键(常用命令).docx
- (2026春新版)部编版八年级语文下册《第一单元》PPT课件.pptx
- 2018电力监控系统网络安全监测装置技术规范.docx
- 2022电力监控系统安全防护方案审核要点.docx
- 2014电力电缆光伏系统EN 50618欧标.docx
- (2026春新版)人教版二年级数学下册《第三单元 万以内数的认识》教案.docx
- (2026春新版)人教版二年级数学下册《第四单元 万以内的加法和减法》教案.docx
- (2026春新版)人教版二年级数学下册《综合与实践 时间在哪里》教案.docx
- (2026春新版)苏教版二年级数学下册《综合与实践 时间有多长》教案 .pdf
- (2026春新版)部编版三年级语文下册第3单元(教案).docx
- (2026春新版)部编版三年级语文下册第8单元(教案).docx
原创力文档

文档评论(0)