纯C语言开发(电子相册).doc
《纯C语言开发(电子相册).doc》由会员分享,可在线阅读,更多相关《纯C语言开发(电子相册).doc(10页珍藏版)》请在沃文网上搜索。
1、摘要:对于java,.net,C+等一些面向对象的语言来说,结合相应的开发工具做出一个电子相册并非难事,相信只要是会编程的人应该都会。但是如果用纯 C 语言在 DOS 下显示出真彩的图片并不是一件很容易的事。它涉及到各方面的知识,包括像素的描绘、排列,调色板的调用,图片格式的分析。本文主要介绍我用纯 C 语言开发一个电子相册的过程,以及用到的一些关键技术,包括前面锁提到的技术另外还有链表的创建,以及常用的图片显示技术和汉字显示技术。关键词:电子相册、bmp图片格式、链表、汉字显示、存储算法、文件结构目录引言2第一章 可行性分析2n1.1什么是电子相册.2n1.2 系统的可行性分析3l1.2.1
2、 市场可行性3l1.2.2 技术可行性3第二章 系统概述3n1.1开发工具及环境3n1.2 系统功能简介3第三章 系统总体结构设计3n3.1 系统功能模块划分3第四章 详细设计4n4.1 系统流程图4n4.2界面显示模块4l4.2.1 汉字显示技术4n4.3功能选择模块5n4.4图片浏览模块(自动浏览模式、手动浏览模式)6l4.4.1 链表的创建6l4.4.2 BMP图片显示7l4.4.3 BMP图片格式文件结构分析7l4.4.4 BMP图片存储算法9l4.4.5 BMP图片的显示方法9第五章 总结10致谢10参考文献10引言随着社会的不断发展,计算机已经逐渐普及,几乎渗入到人们生活中的每一个
3、角落。人们的日常生活已经越来越离不开计算机了。计算机软件的发展更是日新月异。现在好多人都喜欢把自己的照片或是一些美丽的图片制作成电子相册,以动画的方式并加以特效去浏览。网上各种各样的电子相册层出不穷,但是还从来没有看到一个用 C 语言写的电子相册。本人在学习 C 语言之际,突发奇想用 C 语言写一个电子相册,在 DOS 系统下实现图片的浏览,虽然它没有任何经济价值,但可以供学习参考。第一章 可行性分析n 1.1什么是电子相册电子相册是指可以在电脑上观赏的区别于CDVCD的静止图片的特殊文档,其内容不局限于摄影照片,也可以包括各种艺术创作图片。电子相册具有传统相册无法比拟的优越性:图、文、声、像
4、并茂的表现手法,随意修改编辑的功能,快速的检索方式,永不褪色的恒久保存特性,以及廉价复制分发的优越手段。 n 1.2 系统的可行性分析l 1.2.1 市场可行性随着个性化时代的来临和人们生活水平的不断提高,人们的生活方式也变得时尚起来了,校园生活,天真浪漫,同窗友情,张张照片为您定格;缘定三生,从恋爱到结婚,一张张照片记下了浪漫史,意义非凡;宝宝长大了,照片一张一个样,天真童趣,您想珍藏这些照片吗?欣赏昔日身姿,却因照片静态的表现方式让人觉得枯燥;一项活动结束了,留下一叠杂乱无章的照片;一本本厚重的相册,一张张因保存不善而失去往日风采甚至毁损的照片,真让人有些不忍面对,随着电脑软件的发展,人们
5、都迫切的需要一款软件开管理自己的照片。于是开发电子相册将给人一种全新的留念方式,所以该软件开发的市场价值是可行的。l 1.2.2 技术可行性该系统主要采用 C 语言编写,从图片格式分析到显示完全可以实现。在技术上是可行的。第二章 系统概述n 1.1开发工具及环境本系统采用纯C语言开发,所用的开发工具是 WIN-TC。开发环境:显卡:Intel(R) 82865G Graphics Controller.(必须支持svga)屏幕分辨率:1024*768像素。颜色质量:最高(32位)。DPI设置:正常尺寸(96 DPI)。显卡模式:1024*768,真彩色(32位),85赫兹。n 1.2 系统功能
6、简介程序运行前,想将图片拷贝到功能文件下的“image”文件夹中。程序运行时首先进入欢迎界面,隔三秒自动跳转到功能选择界面,用户选择相应的选项执行相应的功能。在图片浏览时,系统将从“image”文件夹中读取图片,并显示。第三章 系统总体结构设计n 3.1 系统功能模块划分该系统主要分为四大功能模块:1、界面显示模块该模块主要实现系统开始界面和结束界面的显示。2、功能选择模块该模块给用户提供相应的功能选项,供用户选择。包括“自动浏览模式”,“手动浏览模式”和“退出”。选择不同的选项则进入相应的模式,选择“退出”则系统终止运行。3、自动浏览模块该模块实现图片的自动浏览,系统每个3秒钟自动切换到下一
7、张图片。在浏览过程中用户可按任意键退出,否则系统浏览完最后一张图片自动退出。3、手动浏览模块该模块实现图片的手动浏览,用户可按上下方向键浏览上一张、下一张图片。按“ESC”键退出浏览。通过以上几个功能模块的划分,为整个系统定义了一个整体的框架结构。第四章 详细设计n 4.1 系统流程图开始运行Y=140?自动浏览模式欢迎界面YNY=190?手动浏览模式YN结束界面运行结束退出n 4.2界面显示模块l 4.2.1 汉字显示技术汉字显示主要包括汉字的读取和显示两个步骤,由于中文汉字太多,中文汉字的显示通常都要用到汉字库。中文字库有两大类型:点阵式字库,矢量字库。点阵式字库通过将中文字看陈由一个个点
8、组成的二维阵列来显示实现,如放大文字则会出现明显的不平滑现象;矢量字库则通过对文字每个笔画的起点和终点的记录来完成文字的显示,其效果较好,无论字的大小都可以保证字体圆滑。本系统采用的是点阵汉字显示技术。先将要显示的汉字的点阵信息全部存储到一个头文件(word.h)中,再调用drawmat函数将所要显示的汉字画出来。具体代码如下:void drawmat(char *mat,int matsize,int x,int y,int color) /*依次:字模指针,点阵大小,起始坐标(x,y),颜色*/ int i, j, k, n;n = (matsize - 1) / 8 + 1;for(j
9、= 0; j matsize; j+) for(i = 0; i n; i+) for(k = 0;k k) /*测试为1的位则显示*/ putpixel(x + i * 8 + k, y + j, color);n 4.3功能选择模块该模块的功能实现主要是用到了图形区域的重绘显示,并返回屏幕的纵坐标值,以实现功能的选择。主要代码实现如下:int workinterface() char key; int x=220,y1=140,y2; initgr(1); /*打开图形模式*/ setfillstyle(1,BLUE); /* 设置填充模式和颜色 */ bar(x,y1,x+200,y1+
10、50); /*画长方体并填正面*/ setcolor(BLUE); setfillstyle(2,BLUE); draw(); /*输出菜单*/ prompt(y1); while(key=getch()!=r) if(key=72) /* 上移 */ if(y1=140) cleardevice(); /*清楚图形屏幕*/ y2=y1+100; setfillstyle(1,BLUE); bar(x,y2,x+200,y2+50); /*画长方体*/ setcolor(BLUE); setfillstyle(2,BLUE); draw(); /绘制图形 y1=y2; prompt(y1);
11、/*操作提示*/ else cleardevice(); y2=y2-50; setfillstyle(1,BLUE); /* 设置填充模式和颜色 */ bar(x,y2,x+200,y2+50); /*画长方体并填正面*/ setcolor(BLUE); setfillstyle(2,BLUE); draw(); y1=y2; prompt(y1); else if(key=80)/* 下移 */ if(y1=240) cleardevice(); y2=y1-100; setfillstyle(1,BLUE); /* 设置填充模式和颜色 */ bar(x,y2,x+200,y2+50);
12、/*画长方体并填正面*/ setcolor(BLUE); setfillstyle(2,BLUE); draw(); y1=y2; prompt(y1); /*操作提示*/ else cleardevice(); prompt(1); y2=y1+50; setfillstyle(1,BLUE); /* 设置填充模式和颜色 */ bar(x,y2,x+200,y2+50); /*画长方体并填正面*/ setcolor(BLUE); setfillstyle(2,BLUE); draw(); y1=y2; prompt(y1); initgr(0); /*关闭图形模式*/ return y1;n
13、 4.4图片浏览模块(自动浏览模式、手动浏览模式)l 4.4.1 链表的创建链表是一种比较重要的数据结构,它采用了动态分配内存的方法为一个结构分配内存空间。每一次分配一块内存空间用来存放一个数据,我们称之为一个节点。链表主要有“单链表”,“单循环链表”,“双链表”,“双循环链表”四种类型。在C语言中,链表通常都是通过结构体和指针来实现的。单链表:每个节点只有一个指针域,指针域存储下一个节点的地址。尾节点的指针域为空。单循环链表:在单链表的基础上,在尾节点的指针域中存放头结点的地址,形成一个环。双链表:每个结点有两个指针域:前驱结点指针域,后继结点指针域,分别存放前一个和后一个结点的地址,头结点
14、的前驱结点指针域为空,尾结点的后继结点指针域为空。双循环链表:在双链表的基础上,在尾结点的后继结点指针域中存放头结点的地址,在头结点的前驱指针域中存放尾结点的地址,形成一个双环。本系统用到了双链表,在存放图片的文件夹(image)目录下搜索bmp格式的文件,将文件名存储到一个双链表中。实现代码如下所示:struct bmpfile char filename20; struct bmpfile *prec; /*前驱节点*/ struct bmpfile *next; /*后继节点*/;struct bmpfile *file_link() struct ffblk file; struct
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 开发 电子相册