欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    纯C语言开发(电子相册).doc

    • 资源ID:876567       资源大小:88.24KB        全文页数:10页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    纯C语言开发(电子相册).doc

    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

    15、bmpfile *head=NULL,*cur=NULL,*newp=NULL; register int done; char *path=image; char *fname; done=findfirst(image*.bmp,&file,0); /*在image目录下搜索第一个.bmp文件*/ while(!done) newp=(struct bmpfile *)malloc(sizeof(struct bmpfile); /*创建新节点*/ if(head=NULL) /*创建头节点*/ head=newp; head-prec=NULL; else cur=head; while

    16、(cur-next!=NULL) cur=cur-next; cur-next=newp; cur-next-prec=cur; cur=newp; strcpy(fname,path); strcat(fname,file.ff_name); strcpy(cur-filename,fname); cur-next=NULL; done= findnext(&file); /*继续搜索下一个与file类型相匹配的文件*/ return head;l 4.4.2 BMP图片显示这是本系统中的难点,也是关键技术。Bmp图片就是通常所说的位图,是一种与硬件设备无关的图像文件格式,使用非常广。它采用

    17、位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。l 4.4.3 BMP图片格式文件结构分析典型的BMP图像文件由四部分组成:1:位图文件头数据结构(14个字节):它包含BMP图像文件的类型、显示内容等信息;其结构定义如下:typedef struct tagBITMAPFILEHEAD

    18、ER/ 文件头的偏移量表示,以字节为单位WORDbf Type; / 位图文件的类型,必须为BMP(0-1字节)DWORD bfSize; / 位图文件的大小,以字节为单位(2-5字节)WORD bfReserved1; / 位图文件保留字,必须为0(6-7字节)WORD bfReserved2; / 位图文件保留字,必须为0(8-9字节)DWORD bfOffBits; / 位图数据的起始位置,以相对于位图(10-13字节) BITMAPFILEHEADER;2:位图信息数据结构(40个字节):包含BMP图像的宽、高、压缩方法,以及定义颜色等信息;其结构定义如下:typedef struct

    19、 tagBITMAPINFOHEADERDWORD biSize; / 本结构所占用字节数(14-17字节)LONG biWidth; / 位图的宽度,以像素为单位(18-21字节)LONG biHeight; / 位图的高度,以像素为单位(22-25字节)WORD biPlanes; / 目标设备的级别,必须为1(26-27字节)WORD biBitCount;/ 每个像素所需的位数,必须是1(双色),(28-29字节)/ 4(16色),8(256色)或24(真彩色)之一DWORD biCompression; / 位图压缩类型,必须是 0(不压缩),(30-33字节)/ 1(BI_RLE8

    20、压缩类型)或2(BI_RLE4压缩类型)之一DWORD biSizeImage; / 位图的大小,以字节为单位(34-37字节)LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数(38-41字节)LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数(42-45字节)DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数(46-49字节)DWORD biClrImportant;/ 位图显示过程中重要的颜色数(50-53字节) BITMAPINFOHEADER;3:调色板:这个部分是可选的,有些位图需要调色板,有些位图不需要,比如真彩色图

    21、(24位的BMP)就不需要调色板;其颜色表结构定义如下:typedef struct tagRGBQUAD BYTE rgbBlue;/ 蓝色的亮度(值范围为0-255)BYTE rgbGreen; / 绿色的亮度(值范围为0-255)BYTE rgbRed; / 红色的亮度(值范围为0-255)BYTE rgbReserved;/ 保留,必须为0 RGBQUAD;颜色表中RGBQUAD结构数据的个数有biBitCount来确定:当biBitCount=1,4,8时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO

    22、结构定义如下:typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; / 位图信息头RGBQUAD bmiColors1; / 颜色表 BITMAPINFO;4:位图数据:这部分内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数: 当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当biBitCount=8时,1

    23、个像素占1个字节;当biBitCount=24时,1个像素占3个字节;Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。biSizeImage = (bi.biWidth * bi.biBitCount) + 31) & 31) / 8) * bi.biHeight; l 4.4.4 BMP图片存储算法BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。例如,一个800600的24位几乎占据1.4MB空间。因此它们通常不适合在因特网或者其它低速或者有容量限制的媒介上进行传输。 根据颜色深度的不同,图像上的一个像素可以用一个或

    24、者多个字节表示,它由n/8所确定(n是位深度,1字节包含8个数据位)。图片浏览器等基于字节的ASCII值计算像素的颜色,然后从调色板中读出相应的值。n位2n种颜色的位图近似字节数可以用下面的公式计算: BMP文件大小约等于 54+4*2n+(w*h*n)/8,其中高度和宽度都是像素数。 需要注意的是上面公式中的54是位图文件的文件头,是彩色调色板的大小。另外需要注意的是这是一个近似值,对于n位的位图图像来说,尽管可能有最多2n种颜色,一个特定的图像可能并不会使用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于。由于存储算法本身决定的因素,根据几个图像参数的不同

    25、计算出的大小与实际的文件大小将会有一些细小的差别。l 4.4.5 BMP图片的显示方法bmp图片的显示方法主要有三种:一是使用内存调用方法显示bmp图片。我们通常所说的屏幕就是屏显,在将bmp调色板区写入计算机调色板和已经读取bmp文件图像存储区到内存的基础上,再从内存将数据读取给显存只需要进行一个内存复制操作就可以啦。;二是直接从文件读取到屏幕显示bmp文件。这种方法将通过显存显示bmp文件所需要的内存空间、读取数据到申请的空间、显示等多步任务简化成一步。事实上也就是将读取文件数据到申请内存变到显示内存。三是采用绘点的方法将图片的像素按照图片的文件的排列顺序一个个在屏幕上画出来。本系统中采用

    26、的是第三种方法显示bmp图片。具体实现代码如下:void view(char *fname)FILE *fp;int midx,midy;int width,height,gd=DETECT,gm,i,j;ColorBGR *buffer;if(fp=fopen(fname,rb)=NULL) /*打开文件,并且判断文件是否存在*/ cprintf(Cant find file %s,fname); exit(1); installuserdriver(Svga64k,return_SVGA64K_mode);/*对于svga64k必需执行该函数以安装BGI驱动*/initgraph(&gd,

    27、&gm,); /*执行TC默认的BGI初始化函数 */fseek(fp,18,SEEK_SET);fread(&width,4,1,fp); /*图象宽度*/ fread(&height,4,1,fp); /*图象长度*/ buffer=(ColorBGR *)malloc(width*sizeof(ColorBGR);/*为一行所有的像素的颜色开创空间,用来保存同一个宽度上的每个点的颜色值*/fseek(fp,54,SEEK_SET); /*定位文件指针指向颜色存储区*/midx=(getmaxx()-width)/2;midy=(getmaxy()-height)/2;for(j=heig

    28、ht-1;j=0;j-) fread(buffer,width*sizeof(ColorBGR),1,fp); /*读取该行像素的所有点的颜色*/ if(width%4) fseek(fp,(4-width%4),SEEK_CUR); /*宽度修正*/ for(i=0;i3,bufferi.g2,bufferi.b3); /*重设每个点的颜色*/ putpixel(midx+i,midy+j,0); /*画点*/ free(buffer);fclose(fp);sleep(3);closegraph();第五章 总结回顾整个开发过程,认识到软件系统的开发是一个综合性的工程,其开发过程的每一个阶

    29、段都要制定详细计划,特别是要了解系统的操作流程,可使系统的建设少走许多弯路,加快建设进度。其次明确软件需求也是很重要的,在做每一个系统之前,你首先都要明确的知道要让该系统做什么。只有明确了需求你才能进行下面的工作,另外,系统的设计是极其重要的,如果整体的设计出错则后面所做的工作可能要全部返工。经过本系统的开发让我了解到软件工程学对软件开发的重要作用。更进一步的锻炼了我的编程思想,更深层次的熟悉软件开发的整个流程,也使我对 C 语言的强大及高深有了更进一步的认识。为我以后在 IT 界的发展奠定了坚实的基础。致谢在三年的大学时光里,我学到了很多东西,尽管学的不是很精通,但起码也掌握了一门能在社会上立足的技术。在此,我非常感谢学校老师对我的栽培和教导。参考文献1、 c游戏编程从入门到精通 2、Turbo C用户界面程序设计3、 C图形编程 4、VESA SVGA图形图像编程秘技10


    注意事项

    本文(纯C语言开发(电子相册).doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922