翻新时间:2013-12-18
SVGA图像处理
SVGA图像处理 SVGA图像处理 SVGA图像处理 SVGA彩色图形卡是一种超级VGA卡,它不仅具有640×480×16色图像显示模式,而且具有640×480×256色图像显示模式。
Microsoft C/C++7.0提供了丰富的图形库函数,尤其是提供了对SVGA卡所能设置的高分辨率图像模式的支持,利用丰富的图形库函数进行组合,就可以完成各种需要的功能。例如图像处理,动画编程,界面制作等。这一点对编程者来说无疑是十分方便的。根据VESA图形标准,在图像模式下,SVGA的Video buffer(视频缓冲区)是顺序的链结构,且图像数据是按行序顺序存放的,一个像素(屏幕上的一个点)用存储器的一个字节(256色)表示。视频存储器按字节连续寻址,与主机内存采用映射方式通讯,一次只能读写64KB的视频存储器,通过改变段偏移量(I/O操作)来寻址不同的段,即实现对全部视频存储器的操作。
同时,直接访问SVGA的寄存器进行读写操作,充分利用硬件的支持可以大大加快图形的处理速度。实践表明,其运行速度明显优于图形库中提供的函数(以-getimage()和-putimage()为例快30倍)。-getimage()和-putimage()两个函数的参数类型说明及意义与Microsoft C/C++7.0中相应函数的参数类型说明及意义相同。
/* 将图像存储到缓冲区中 */short x1,y1,x2,y2;
char-huge *image;
{
char-far*buf,-huge *q;
long u;
short m,n,i,j,block;
m=abs(x2-x
1)+1;
n=abs(y2-y
1)+1;
(short)*image=m;
(short)*(image+
2)=n;/* 保留图像的高度与宽度 */
q=image+4;u+=min(y1,y
2) * 640L;
block=(short)(u/65536L);
u-=block*65536L;/* 计算偏移量 */
-FP-SEG(buf)=0xA000;
-FP-OFF(buf)=u;
-outp(0x3c4,
1
4),
-outp(0x3C5,block^
2);/* 设置页寄存器 */
for (i=0; i<n; i++, q+=m) {/* 行循环 */
-memcpy(q, buf, m);
u+=640;
if(u<65536L) buf+=640;
else {/* 当一行不在同一段时 */
u-=65536L;
-FP-SEG(buf)=0xA000;
-FP-OFF(buf)=0;
block++;
-outp(0x3C4,
1
4);
-outp(0x3C5,block^
2);
if(m>640-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)>6
40) m=640-x;
else m=mm;
-memcpy(&n, image+2,
2);
if (y+n>4
80) 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,
1
4);
-outp(0x3C5, block^
2);
for (i=0; i<n; i++,q+=mm) {
if (action==-GPSET) -memcpy(buf, q, m);
else if(action==-GOR)for (j=0;j<m; j++) * (buf+j)|=(*(q+j));
else if(action==-GAND)for (j=0;j<m; j++) * (buf+j)&=(* (q+j));
else if(action==-GXOR)for (j=0;j<m; j++) * (buf+j)^=(* (q+j));
else if(action==-GPRESET)for (j=0;j<m; j++) * (buf+j)=~(* (q+j));
u+=640;
if(u<65536L) buf+=640;
else {
u-=65536L;
-FP-SEG(buf)=0xA000;
-FP-OFF(buf)=0;
block++;
-outp(0x3C4,
1
4);
-outp(0x3C5, block^
2);
if (m>640-u) {
if (action==-GPSET) -memcpy(buf,q+640-u, (size-t)(m-640+u));
else if(action==-GOR)
for(j=0;j<m-640+u;j++) *(buf+j)|=(*(q+640-u+j));
else if(action==-GAND)
for(j=0;j<m-640+u;j++) * (buf+j)&=(*(q+640-u+j));
else if (action==-GXOR)
for(j=0;j<m-640+u;j++) * (buf+j)^=(*(q+640-u+j));
else if(action==-GPRESET)
for(j=0;j<m-640+u;j++) * (buf+j)=~(* (q+640-u+j));
}
-FP-OFF(buf)=u;
}
}
}
下载文档
网友最新关注
- 逛商场
- 我是包饺子的小能手
- 乐乐的翅膀
- 倒霉的新年
- 秋天
- 如果我会飞
- 压岁钱怎么花
- 值日
- 学擀饺子皮
- 我的家乡
- 我去姥姥家
- 我的神矛表演多精彩
- 买菜
- 永大王
- 我是一个小陀螺
- 农村团员服务区方案
- ×村救灾重建工作实施方案
- XX市旅游局旅游网网站模块DMS项目拓展方案
- “青春飞扬”校园科技文化艺术节活动方案
- ×镇2004—2006年社会治安防控体系建设实施方案
- ××县水利工程管理体制改革实施方案
- ×厂“杰出青年”创评活动实施方案
- 旅游宣传包装促销方案
- 2004年城南镇联动中心工作方案
- 城市客运秩序整治实施方案
- 开展第十个党风廉政教育月活动实施方案
- **大队深入开展“三互”活动的实施方案
- *电信文明单位创建方案
- 中心学习小组学习实施方案
- 纪念建党83周年活动方案
- 探讨高师音乐专业钢琴课程结构调整的构想
- 试论中国民族声乐的学习策略
- 试论音乐欣赏教学中的音乐体裁分析
- 浅谈如何上好非音乐专业大学生音乐赏析课
- 探讨新课程下高师音乐课堂的师生交流与互动
- 浅谈苗族民歌《飞歌》及其在非原生态音乐作品中的延展
- 浅谈音乐在广告创意中的运用
- 试论职业高中音乐教育的创新意识培养
- 浅谈培养学生音乐学习能力 提高高中音乐教学质量
- 试论提高钢琴练习效率的有效方法
- 试论多媒体在音乐教学中的影响
- 试论蒙古族舞蹈在不同时期的创作风格
- 试论树立“原作”意识,寻求演唱的最佳途径
- 探析消费艺术语境下解读剧场民间歌舞
- 浅议高师《中国民族民间舞蹈》课程教学改革与实践
- 《北京》教学设计
- 《看雪》教学设计
- 《葡萄沟》教案
- 《最大的“书”》教学设计
- 《浅水洼里的小鱼》教学设计
- 《数星星的孩子》教学设计
- 《蓝色的树叶》教学设计
- 《我要的是葫芦》第一课时教案
- 《纸船和风筝》教学设计
- 《从现在开始》教学设计
- 《找春天》教案
- 《酸的和甜的》教学设计
- 《雷雨》教学设计
- 《称赞》
- 《雷雨》第二课时教案