BMP图形格式分析和图象显.ppt
软件课程设计,电子科学与技术系 软件课程设计,本次课程安排,本设计的目的、内容和基本要求课程设计题目与设计内容简介基本绘图函数介绍模拟嵌入式实时操作系统简介,电子科学与技术系 软件课程设计,1.本设计的目的、内容和基本要求,目的本课程设计的目的是通过一个小设计实例来加深对C语言的理解和应用,在完成了本次课程设计后能够较为熟练的使用C语言编写小规模的应用程序以实现特定的功能。,电子科学与技术系 软件课程设计,1.本设计的目的、内容和基本要求,内容BMP图形格式分析和显示,电子科学与技术系 软件课程设计,1.本设计的目的、内容和基本要求,基本要求程序具有较强的可读性,关键代码必须有注释;注意代码的书写风格。,电子科学与技术系 软件课程设计,2.BMP图像显示,利用C 语言实现BMP 格式图象文件的分析和显示。主要内容包括:,完成BMP 格式图像的显示,要求在提供的画布上循环的显示某一文件夹下面所有的BMP 文件(支持所有BMP格式);实现图像的特效显示(淡入淡出,百页窗等等)。,电子科学与技术系 软件课程设计,2.BMP图像显示,2.1 计算机中的颜色2.2 BMP文件格式2.3 RLE压缩算法简介,电子科学与技术系 软件课程设计,2.1 计算机中的颜色表示,计算机如何表示颜色 三基色原理(Red Green Blue),每一基色用一个字节表示;可以在Winsows自带的画图软件中自己配色来了解计算机中如何表示颜色。红色:0 xFF 0 x00 0 x00白色:0 xFF 0 xFF 0 xFF黑色:0 x00 0 x00 0 x00,电子科学与技术系 软件课程设计,2.1 计算机中的颜色表示,单色(21)4位色(24)8位色(28)16位色(216)24位色(224)32位色(232),?,电子科学与技术系 软件课程设计,2.1 计算机中的颜色表示,一个2*8的图形如何表示(1)24位 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff 0 xff0000 0 x0000ff(2)16位(565模式)0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f 0 xf800 0 x001f,位图数据,电子科学与技术系 软件课程设计,2.1 计算机中的颜色表示,一个2*8的图形如何表示(3)1位 建立调色板 0:0 xff0000 1:0 x0000ff 位图数据 01010101 10101010(0 x55 0 xaa)(4)8位 建立调色板 0:0 xff0000 1:0 x0000ff.255:0 x000000 位图数据 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00 0 x01 0 x00,位图数据,电子科学与技术系 软件课程设计,2.2 BMP文件格式,一般BMP文件可以看成4个部分组成:BMP文件头BMP信息头颜色表(调色板)(optional)定义BMP位图数据,电子科学与技术系 软件课程设计,2.2 BMP文件格式,1.BMP文件头,电子科学与技术系 软件课程设计,2.BMP信息头,2.2 BMP文件格式,电子科学与技术系 软件课程设计,2.2 BMP文件格式,3.颜色表(调色板),电子科学与技术系 软件课程设计,2.2 BMP文件格式,4.位图数据,电子科学与技术系 软件课程设计,2.2 BMP文件格式,实例分析 实例1,基本属性:宽:107 高:47 颜色深度:24位色文件大小:15282,图象头BM,文件大小0 x3BB2,保留字段0 x0000,位图数据开始偏移,图象头信息大小,位图宽度0 x6B107,位图高度0 x2F=47,图象面数,颜色深度0 x182424位色,压缩方式无压缩,位图数据大小0 x7C3B,位图数据区域,电子科学与技术系 软件课程设计,2.2 BMP文件格式,实例分析 实例2,基本属性:宽:107 高:47 颜色深度:8位色文件大小:6154,文件标识BM,文件大小0 x180A,保留字段0 x0000,图象数据开始偏移,图象信息头大小,图象宽度0 x6B107,图象高度0 x2F47,图象面数1,位数/象素0 x88位色,压缩方式0无压缩,位图数据大小(字节)0 x13D4,颜色表(调色板)区域,位图数据区域,电子科学与技术系 软件课程设计,2.3 RLE压缩算法简介,为什么压缩?,压缩方法分类?,考虑未压缩的BMP文件,它们通常比同一幅图像的经过压缩后的文件格式要大很多。例如,一个800600的24位几乎占据1.4MB空间。因此它们通常不适合在网络或者其他应用场合。,无损压缩,如:RLE,Huffman等等;有损压缩,如:DCT等等,电子科学与技术系 软件课程设计,2.3 RLE压缩算法简介,行程压缩编码(Run Length Encoding)BI_RLE8 每个象素为8比特的RLE压缩编码,可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式可在同一幅图中的任何地方使用。编码方式 绝对方式,由2个字节组成,第一个字节指定使用相同颜色的象素数目,第二个字节指定使用的颜色索引。此外,这个字节对中的第一个字节可设置为0,联合使用第二个字节的值表示:第二个字节的值为0:行的结束。第二个字节的值为1:图象结束。第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。,绝对方式:第一个字节设置为0,而第二个字节设置为0 x030 xFF之间的一个值。在这种方式中,第二个字节表示跟在这个字节后面的字节数,每个字节包含单个象素的颜色索引。,示例:如下面用16进制表示的8-位压缩图象数据序列 03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01 这些压缩数据可解释为:,电子科学与技术系 软件课程设计,行程压缩编码(Run Length Encoding)BI_RLE4 每个象素为4比特的RLE压缩编码,同样也可使用编码方式和绝对方式中的任何一种进行压缩,这两种方式也可在同一幅图中的任何地方使用。编码方式 绝对方式,由2个字节组成,第一个字节指定象素数目,第二个字节包含两种颜色索引,一个在高4位,另一个在低4位。第一个象素使用高4位的颜色索引,第二个使用低4位的颜色索引,第3个使用高4位的颜色索引,BI_RLE4也同样联合使用第二个字节中的值表示:第二个字节的值为0:行的结束。第二个字节的值为1:图象结束。第二个字节的值为2:其后的两个字节表示下一个象素从当前开始的水平和垂直位置的偏移量。,这个字节对中的第一个字节设置为0,第二个字节包含有颜色索引数,其后续字节包含有颜色索引,颜色索引存放在该字节的高、低4位中,一个颜色索引对应一个象素。,2.3 RLE压缩算法简介,电子科学与技术系 软件课程设计,2.3 RLE压缩算法简介,示例:如下面用16进制表示的4-位压缩图象数据序列 03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01 这些压缩数据可解释为:,电子科学与技术系 软件课程设计,3.滚动字幕的实现,主要内容包括:1.熟悉点阵字库的存取规则;2.读取文件的输入信息,包括滚动方式,显示位置、尺寸以及内容等;3.利用C语言实现在指定位置滚动显示文件中的内容。,电子科学与技术系 软件课程设计,3.滚动字幕的实现,点阵字库简介区位码 GB2312字符集构成一个94行、94列的表,行号称为区号,列号称为位号,每一个汉字用它所在的区号和位号来表示;机内码 一个汉字字符由两个字节的机内码表示,分别称为高字节内码和低字节内码。它们和区位码的联系在于:区码高字节内码0 xa0,位码低字节内码0 xa0。如:汉字“升”,机内码为 0 xc9fd 区码=0 xc9-0 xa0=0 x29 位码=0 xfd-0 xa0=0 x5d,电子科学与技术系 软件课程设计,3.滚动字幕的实现,汉字点阵字库存放方式 从第1区15区 符号 从第16区55区 一级汉字 从第56区87区 二级汉字字模在字库中按照区位码从小到大排列每字符占字库大小由点阵大小决定,如1616点阵的字库,每个字符占32字节 2424点阵的字库,每个字符占72字节,电子科学与技术系 软件课程设计,4.基本绘图函数介绍,1.GFMDrawPixel();2.GFMDrawLine();3.GFMDrawRectangle();4.GFMDrawCircle();5.GFMReadRectangle();6.GFMWriteRectangl();,电子科学与技术系 软件课程设计,4.基本绘图函数介绍,1.GFM_DrawPixel(INT32U whichColor,INT32U x,INT32U y,INT32U pixelCount),电子科学与技术系 软件课程设计,4.基本绘图函数介绍,2.GFMDrawLine(INT32U startX,INT32U startY,INT32U endX,INT32U endY,INT32U Color);,GFM_DrawLine(0,26,16,26,0 xFFFF0000);,GFM_DrawLine(12,2,2,12,0 xFFFF0000,);,(12,2),(2,12),(16,26),(0,26),电子科学与技术系 软件课程设计,4.基本绘图函数介绍,3.GFMDrawRectangle(INT32U x,INT32U y,INT32U width,INT32U height,INT32U color,BOOL fill);,(26,10),GFM_DrawRectangle(2,2,25,9,0 xFFFF0000,0);,GFM_DrawRectangle(2,2,25,9,0 xFFFF0000,1);,(2,2),电子科学与技术系 软件课程设计,4.基本绘图函数介绍,4.GFMDrawCircle(INT32U xCentre,INT32U yCentre,INT32U r,INT32U color,BOOL fill);,GFM_DrawCircle(20,15,10,0 xFFFF0000,0);,r=10,GFM_DrawCircle(20,15,10,0 xFFFF0000,1);,电子科学与技术系 软件课程设计,4.基本绘图函数介绍,5.GFMReadRectangle(INT32U x,INT32U y,INT32U width,INT32U height,INT8U*dest);,(x,y),width,height,电子科学与技术系 软件课程设计,4.基本绘图函数介绍,6.GFMWriteRectangl(INT32U x,INT32U y,OSD_RECT rect,UINT8*source,INT32U width,INT32U height);,电子科学与技术系 软件课程设计,5.实时操作系统简介,单任务和多任务(task)消息和消息队列(message,queue)信号量(semaphore),电子科学与技术系 软件课程设计,5.实时操作系统简介,任务(task)基本函数调用 UINT32 DTOS_DRV_CreateTask(void(*task)(void),INT32U priority,INT32U stackSize,INT8S Name);void DTOS_DRV_DelayTask(INT16 ms);,电子科学与技术系 软件课程设计,5.实时操作系统简介,消息和队列(message/queue)基本函数调用UINT32 DTOS_DRV_CreatQueue(INT32U QueueSize);INT32S DTOS_DRV_SendMessage(INT32U queueID,T_Message*Message);INT32S DTOS_DRV_ReceiveMessage(INT32U queueID,T_Message*Message);,电子科学与技术系 软件课程设计,5.实时操作系统简介,信号量基本函数调用INT32 DTOS_DRV_CreateSemaphore(char name4,INT32U initValue,INT32U WaitMode,INT32U*semId);INT32 DTOS_DRV_SetSemaphore(INT32U Id);INT32 DTOS_DRV_GetSemaphore(INT32U Id);,电子科学与技术系 软件课程设计,入口函数,提供一个开发平台,已经对绘图环境进行了初始化工作。提供了一个设计入口-MainTask_Init(),该函数是一个空函数,在此处添加所需要的代码。可以采用单任务模式,也可以使用模拟的实时操作系统,采用多任务模式开发。,电子科学与技术系 软件课程设计,一些的工具软件,PhotoshopultraEdit画图(Windows),电子科学与技术系 软件课程设计,联系方式,陶雄飞移动电话:QQ:429877014QQ群:43759321电子邮箱:,电子科学与技术系 软件课程设计,注意事项,软件课程设计进度安排:第五周:调研报告提交第十周:中期进度报告提交第十五周:期末最终设计报告提交,检查。不定期的抽查部分同学的进展注意:调研、中期报告,每次占25%,最终的报告及检查结果占50%每一组的组长统计需要安排上机的同学,Thank You!,