资源描述:
《vga色模式下的图像漫游》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VGA16色模式下的图像漫游VGA是微机显示的廉价适配器,因而在其上实现图形图像处理的成本较低。在目前国内流行的C语言中,均提供了基本的作图函数,如BorlandcC++、TurboC和MicrosoftC。但还缺少一个最基本的图形图像处理功能-屏幕漫游功能。本文将讨论在VGA16色模式下实现屏幕图像漫游的方法,并给出C语言的程序供读者参考。一、基本构思为了实现漫游的功能,首先将想像中的大幅图像分成N×N块(每块应小于屏幕的分辨率)相同大小的区域,然篦后逐次显示在屏幕上并存放到一个文件中≤。这样就完成了漫游图的制作。
2、可以设想纪,文件提供了一个无限分辨率的虚拟屏幕惋,存储着大幅图像数据。在调用漫游图ね时,将存放在文件中的图像数据的一部分他显示在屏幕上,当用键盘或鼠标控制图像憝漫游时,程序首先将屏幕上的图像移动一定的距离,这一过程实质是硬件漫游。当休屏幕图像移动后,留出的空白位置则从文射件中调出数据显示到屏幕上,这一步实质濮为软件漫游。二、存图文件的数据结构假设在文件中存储了2×2个VGA(艽11/11640×480×16色模式)窗口画面哔,窗口的范围如图1所示。其左上角和右灯下角的坐标分别为(XP1,YP1)、沅(XP2,YP2
3、),将来就在这一窗口鲻范围内进行漫游。@@;图1@@假属设存图时每个窗口大小一样,高度为d,沔宽度为w。存图时漫游窗口的宽度与起始舄坐标均为8的整数倍,这样便于处理。四袤个窗口的排号顺序如图2所示:@@;奢图2@@在此是实现2×2画面的漫游功能,用户可根据需要实现n×n个画面患的漫游,其方法相同。三、基本功能函颈数实现漫游功能主要由以下几个函数实┇现savewin——存图函数,将屏边幕窗口函数存入文件。Loadwin榴——调图函数,由文件将图像数据调入屏矩幕。scroll_x——X轴向漫游笼函数。scroll_y——
4、Y轴向漫游函数。1.常数定义及函数说明/扇*文件名:*+/#defineXP瞟116/*窗口左上角坐标*/11/11#de排fineYP132#defineX镤P2591/*窗口右下角坐标*/#肃defineYP2415#defi酬neLEFT0x4b#define酆RIGHT0x4b#defineU¢P0x48#defineDOWN0蟛x50#defineINDEXRE遐G10x3CE/*VGA图形控制器索掎引寄存器*/#defineVALR杰EG10x3CF/*VGA图形控制器彳数据寄存器*/#defineIND
5、苣EXREG20x3C4/*VGA定序掼器索引寄存器*/#defineVA扦LREG20x3C5/*VGA定序器砾数据寄存器*/·#defineVGABASE0xA0000000L/*棺VGA640*48016色模式起始地诅址*/voidsavewin(ch璜ar*,int,int,int,inкt,int,int);voidLoadwin(char*,int,in朽t,int,int,int,int,肼int);voidscroll_x呸(int,int,int,int,int);voidscroll_y(榈i
6、nt,int,int,int,in〃t)11/112、功能函数/*文件名:*/既#include#include#include""/*制作漫游图濞时存入窗口函数,fname存放漫游逋图文件;(xleft,ytop)在措屏幕上窗口左上角坐标;(xrigh三t,ybuttom)在屏幕上窗口左上角坐标;number图号(0-nx矬y×nxy-1)nxynxy*nx⒎y拼图*/voidsavewin(魑char*fname,intxlef别t,intytop,intxrigh逦t,intybuttom,intnu瘼mber
7、,intnxy){FI桂LE*fp;inti,width,谗hEight;registerj,矬k;11/11Longtemp,offset崽,offset1;charfar*迟base;width=(xrigh二t-xleft+1)/8;hEIg乓ht=ybuttom-ytop+1;猾fp=fopen(fname,"r谓b+");offset=(Long)(number-number%nx教y)*(long)width*(loㄕng)height;offset1=offset;for(i=0;i郦height=y
8、buttom-yt瞵op+1;for(i=3;i>0;i--){outportb(IND臆EXREG1,5);outport瘘b(VALREG1,0);outp┻ortb(INDEXREG2,2);outportb(VALREG2,n瓦);base=(charfar*)绕VGABASE+(long)y0×8瘭0L+(long)(