C语言高级程序设计讲座4的认识.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言高级程序设计讲座4 第四讲 BMP文件的艺术再现 鹏程C语言教学网站庆祝建站一周年特别企划 技术支持:29 现在很多软件都有一个好看的封面,封面就像一个软件的门面,从第一感官刺激别人的视线。下面我们先来看一下下面几个软件的封面: 图一 金山WPS Office 办公组合 图二 Adobe Photoshop 6.0 图三 沈阳电力机械总厂财务部成本管理系统II 在C语言中,我们也可以给软件加上一个好的封面,这会给你的程序添色不少。 学习目标 ·BMP文件的存储格式 ·DOS方式下调用BMP图像的手段 ·艺术再现BMP图像 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值。 DOS方式下调用BMP图像的手段 再现一副非压缩静止位图,主要需下面三个步骤: ·设置显示模式; ·打开位图文件,读取图像控制信息,设置调色板; ·读取位图数据度进行显示。 若图像数据是以堵塞压缩的,那么先解压,然后再按上面的步骤进行。 设置显示模式 随着计算机硬件的不断发展,尤其是显示卡和显示椿性能的提高,显示效果越来越好。图像显示效果主要体现在图像分辨率和颜色两个方面,分辨率反映图像的清晰和谐,而颜色则反映了图像与物体本来颜色的逼真程度。虽然,对一个图形图像界面的评价涉及人的审美观,心理因素等主观原因,但也有客观的标准。高分辨率和真彩色是人分辨率追求的最高目标。现在,性能好的显示卡和显示器(如SUPER VGA)能支持高达1024X768的分辨率,可以表示的颜色数目可达2:4种。对于DOS用户而言,常用的是640X480分辨率/16色、 320X200分辨率/256色和640X480分辨率/256色等几种模式,它们分别是VGA/TVGA中的12h、13h和5dh模式。可通过直接调用DOS的10h中断来设置: 相应的函数定义如下: int Set640_480 (void) { asm mov ax,4fO2h asm mov bx,OlOlh asm int lob if((_AL==0x4f)(_AH==0)) { return(0); } return(1) } 调色板的设置 在DOS环境下显示Windows位图时,由于DOS调色板与Windows调色板不同,因此需自行设置Windows调色板,这样,图像才能不失真地显示所需的颜色并与原图像颜色相匹配。具体操作是从图像文件中读出彩色表数值,调用函数int86x写入Windows调色板控制区域。 相应的函数定义如下: void set_windows_palette16(unsigned char bmp_top[]) /*设置调色板*/ { int i; unsigned char chg[]={0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63}; int f[16]={0,4,2,6,1,5,3,8,7,12,10,14,9,13,11,15 }; for(i=O;i-I 5;i++) (outportb(Ox3c8,chg[f]); outportb(Ox3c9,bmp top[54+i*4+2]/4); outportb(Ox3c9,bmp_top[5,~+i*4+ 1 ]/4); outportb(Ox3c9 ,bmp top [54+i* 4~-0]/4);} } int bmp_out(int x,int y,char *bmp_name) /*打开文件名为*bmp_name的文件,在(x,y)位置输出图像*/ { int i,j,k,l=0,c1,c2,x1,y1; unsigned char h,bmp_top[ 128],

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档