首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心计算机论文计算机理论

Tags:


   ○SVGA图像处理      ★★★ 【字体: 】  
○SVGA图像处理
收集整理:佚名    来源:本站整理  时间:2009-01-10 12:04:47   点击数:[]    

[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持]
   SVGA彩色图形卡是一种超级VGA卡,它不仅具有640×480×16色图像显示模式,而且具有640×480×256色图像显示模式。

Microsoft C/C++7.0提供了丰富的图形库函数,尤其是提供了对SVGA卡所能设置的高分辨率图像模式的支持,利用丰富的图形库函数进行组合,就可以完成各种需要的功能。例如图像处理,动画编程,界面制作等。这一点对编程者来说无疑是十分方便的。

然而遗憾的是许多图形库函数在一些特定的显示模式(如-VERS256COLOR(0x0101)方式(640×480×256)等256色模式)下却无法正常工作,例如使用例程-getimage()和-putimage()时常会出现死机和不能正常工作(出现雪花或不进行任何操作)等现象。用-grstatus()函数检测调用函数的状态时,返回图形错误或警告信息,常见的有图形错误(-1)和不支持请求的视频方式(-2)等,而这些函数在VGA下工作正常。

根据VESA图形标准,在图像模式下,SVGA的Video buffer(视频缓冲区)是顺序的链结构,且图像数据是按行序顺序存放的,一个像素(屏幕上的一个点)用存储器的一个字节(256色)表示。视频存储器按字节连续寻址,与主机内存采用映射方式通讯,一次只能读写64KB的视频存储器,通过改变段偏移量(I/O操作)来寻址不同的段,即实现对全部视频存储器的操作。

同时,直接访问SVGA的寄存器进行读写操作,充分利用硬件的支持可以大大加快图形的处理速度。实践表明,其运行速度明显优于图形库中提供的函数(以-getimage()和-putimage()为例快30倍)。

笔者通过对视频存储器(Video buffer)的直接访问实现了256色图像显示模式下图像块的读写功能。下面附上在VESA标准的0x0101(256)图像显示模式下-getimage()和-putimage()两个函数的源程序,该源程序是用Microsoft C/C++7.0编写的。这两个函数在Compaq 486及兼容机上运行通过。

-getimage()和-putimage()两个函数的参数类型说明及意义与Microsoft C/C++7.0中相应函数的参数类型说明及意义相同。

/* 将图像存储到缓冲区中 */

void-getimage256(x1,y1,x2,y2,image)

short x1,y1,x2,y2;

char-huge *image;

{

char-far*buf,-huge *q;

long u;

short m,n,i,j,block;

m=abs(x2-x1)+1;

n=abs(y2-y1)+1;

(short)*image=m;

(short)*(image+2)=n;/* 保留图像的高度与宽度 */

q=image+4;

u=min(x1,x2);

u+=min(y1,y2) * 640L;

block=(short)(u/65536L);

u-=block*65536L;/* 计算偏移量 */

-FP-SEG(buf)=0xA000;

-FP-OFF(buf)=u;

-outp(0x3c4,14),

-outp(0x3C5,block^2);/* 设置页寄存器 */

for (i=0; i640-u)-memcpy(q+640-u,buf,(size-t)(m-640+u));

-FP-OFF(buf)=u;

}

}

}

/* 在缓冲区中搜索图像 */

void-putimage256(x,y,image,action)

short x,y,action;/* 参数action表示图像写方式 */

char-huge * image;

{

char-far *buf,-huge*q;

long u;

short m, n, j, i, block, mm;

-memcpy(&mm, image, 2);

if ((x+mm)>640) m=640-x;

else m=mm;

-memcpy(&n, image+2, 2);

if (y+n>480) n=480-n;/* 取图像的高度和宽度,并进行边界处理 */

q=image+4;

u=x;

u+=y*640L;

block=(short) (u/65536L);

u-=block*65536L;

-FP-SEG(buf)=0xA000;

-FP-OFF(buf)=u;

-outp(0x3C4, 14);

-outp(0x3C5, block^2);

for (i=0; i640-u) {

if (action==-GPSET) -memcpy(buf,q+640-u, (size-t)(m-640+u));

else if(action==-GOR)

for(j=0;j
   
     
     


转自: 仅仅学术交流与学习之用,非商业之目的.

文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:○NetWare与UNIX的互联方法与实现

  • 下一篇文章:○文本方式下图形提示界面制作
  • 返回上一页】【打 印】【关闭窗口
    中查找“○SVGA图像处理”更多相关内容 5VAR论文频道
    中查找“○SVGA图像处理”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››中小企业办公自动化系统的设计与实...
  • ››未雨绸缪:关于我国电子商务税收对...
  • ››网上书店为钱做秀 行业走势两极分...
  • ››Win2000索引服务的WEB应用
  • ››宽带化――电信发展的必由之路务
  • ››电子商务中x种错误思路和做法
  • ››网络营销与传统营销相比有何优势
  • ››Internet的下一个热点 从内容走向服...
  • ››基于CNAPS的流水号管理方法
  • ››网络时代的财务与会计:管理集成与...
  • ››SVGA图像处理
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .