资源描述:
《vga16色模式下的图像漫游 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、VGA16色模式下的图像漫游VGA是微机显示的廉价适配器,因而在其上实现图形图像处理的成本较低。在目前国内流行的C语言中,均提供了基本的作图函数,如BorlandcC++、TurboC和MicrosoftC。但还缺少一个最基本的图形图像处理功能-屏幕漫游功能。本文将讨论在VGA16色模式下实现屏幕图像漫游的方法,并给出C语言的程序供读者参考。一、基本构思为了实现漫游的功能,首先将想像中的大幅图像分成N×N块(每块应小于屏幕的分辨率)相同大小的区域,然后逐次显示在屏幕上并存放到一个文件中。这样就完成了漫游图的制作。可以设想,文件提供了
2、一个无限分辨率的虚拟屏幕,存储着大幅图像数据。在调用漫游图时,将存放在文件中的图像数据的一部分显示在屏幕上,当用键盘或鼠标控制图像漫游时,程序首先将屏幕上的图像移动一定的距离,这一过程实质是硬件漫游。当屏幕图像移动后,留出的空白位置则从文件中调出数据显示到屏幕上,这一步实质为软件漫游。二、存图文件的数据结构假设在文件ZOOM.SCR中存储了2×2个VGA(640×480×16色模式)窗口画面,窗口的范围如图1所示。其左上角和右下角的坐标分别为(XP1,YP1)、(XP2,YP2),将来就在这一窗口范围内进行漫游。T5S11100.G
3、IF;图1假设存图时每个窗口大小一样,高度为d,宽度为e存放漫游图文件;(xleft,ytop)在屏幕上窗口左上角坐标;(xright,ybuttom)在屏幕上窗口左上角坐标;number图号(0-nxy×nxy-1)nxynxy*nxy拼图*/voidsavee,intxleft,intytop,intxright,intybuttom,intnumber,intnxy){FILE*fp;inti,p,offset,offset1;charfar*base;-ytop+1;fp=fopen(fname,"rb+");offset=
4、(Long)(number-number%nxy)*(long)ber%nxy)*(long)e存放漫游图文件名;(xleft,ytop)在fname中虚拟窗口左上角坐标;(xright,ybuttom)在fname中虚拟窗口右下角坐标;nxynxy*nxy拼图*/voidLoade,intxo,inty0,intxleft,intytop,intxright,intybuttom,intnxy){FILE*fp;registerintj,i,n=8,e,"rb");-ytop+1;for(i=3;i>0;i--){outpo
5、rtb(INDEXREG1,5);outportb(VALREG1,0);outportb(INDEXREG2,2);outportb(VALREG2,n);base=(charfar*)VGABASE+(long)y0×80L+(long)(x0/8);offset=(long)(i*nxy*nxy)*(long)(YP2-YP1+1)*(long)((XP2-XP1+1)/8)+(long)(xleft/8)+(long)(ytop*nxy)*(long)((XP2-XP1+1)/8);for(j=0;j<height;j
6、++){fseek(fp,offset,SEEK_SET);fread(base,1,)定义漫游窗口;dy<向上漫游(以象素为单位);dy>向下漫游(以象素为单位)*/voidscroll-y(intxleft,intytop,intxright,intybuttom,intdy){intp;registeri,j;charfar*base,far*tbase;longoffset,toffset;outportb(INDEXERG1,5);outportb(VALREG1,1);-ytop+1;if(dy<0){
7、base=(charfar*)VGABASE+(long)(ytop*80)+(long)(xleft/8);tbase=base;toffset=(long)dy*80L;temp=height+dy;/*ovetoupdy<0*/for(i=0;i<temp;i++){for(j=0;j<*80)+(long)(xleft/8);tbase=base;toffset=(long)dy*80L;temp=height-dy;/*dy>0*/for(i=0;i<temp;i++){for(j=0;j&l
8、t;)定义漫游窗口;dx<0向左漫游(以8个象素为单位);dx>0向右漫游(以8个象素为单位)*/voidscroll-x(intxleft,intytop,intxright,intybuttom,intdx){intp