C语言屏幕图像输出问题解答~请高手进来

小弟有一C语言问题,多方思索,在图书馆查阅相关书籍也不能理解,问题如下:charfar*printScreen=(charfar*)0xB8000000;voidputo... 小弟有一C语言问题,多方思索,在图书馆查阅相关书籍也不能理解,问题如下:
char far *printScreen=(char far* )0xB8000000;
void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;
}

在图书馆的一本书上只查到:

char far *printScreen=(char far* )0xB8000000; 这句定义了一个远指针,它指向计算机彩色显示器的视频缓冲区地址,但是

void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;
}

这个函数我怎么也搞不懂,printScreen[(x*160)+(y<<1)+0]又是啥意思呢?
望高手解答,小弟万分感激!
注:若再TC2.0环境下先输入上述语句,再输入

putoutChar(20,30,219,RED,BLACK);

就会再屏幕上某个位置输出一黑底红色的方块(ASCII值219代表一个小方块)
诸位可以试一下
这个位置又是咋确定的呢?
万分感谢!!
可运行代码如下:(大虾们可以再TC2.0下试试)
#include <conio.h>

char far *printScreen=(char far* )0xB8000000;
void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;

}
void main()
{
putoutChar(10,15,219,RED,BLACK);

getch();
}
展开
 我来答
百度网友e9042513a
推荐于2017-10-08 · TA获得超过6984个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:3503万
展开全部
char far *printScreen=(char far* )0xB8000000;
void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;

}

解释

彩色显示器 文本显示方式下视频缓冲区起始地址是 0xB8000000
黑白显示器 文本显示方式下视频缓冲区起始地址是 0xB0000000
指针 printScreen 正是指向了 视频缓冲区起始地址

从地址 0xB8000000 开始的数据对应着屏幕上的显示的文本内容和颜色

视频缓冲区数据格式

屏幕上文本显示 格式 横×竖 是 80×25 ,每行80个字符共25行
屏幕上每一个字符在视频缓冲区里占两个字节

函数
putoutChar(int y,int x,char ch,char fc,char bc)
参数解释: y是横坐标位置,x是纵坐标位置,ch 是要显示字符的ASCII码,
fc 是字符颜色, bc 是背景色
fc, bc 范围都是 0-15

函数 putoutChar 的参数 x, y特意写成了 y对应横坐标,x对应纵坐标

printScreen[(x*160)+(y<<1)+0]=ch;
printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc;

解释

一个字符在视频缓冲区里占两个字节
屏幕上文本显示 格式 一行80个字符 所以 *160,
字符变动一行,视频缓冲区里位置变动160个字节

第一个字节 存的是 显示字符的ASCII码 ch
第二个字节 高四位 存的是 显示字符的背景色 bc,低四位存的是 字符的颜色 ch

(bc*16)+fc
就是将 bc 放到高四位, fc 放到低四位 ,合成一个字节

putoutChar 实际上就是通过直接 改写视频缓冲区数据,来刷新文本方式下屏幕显示内容,大大提高了刷新速度
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式