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