c语言 12h,c语言12H图形模式下对显存直接写屏程序,自己写的,有什么建议大家...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*使用640*480分辨率对显存直接写屏*/

#include 

#include 

setpointcolor(int x,int y,int color,unsigned char far *videobuffer)

{

int bits[4],i;    /*bits数组用于保存color的二进制每一位的值*/

int temp,cbit;

for(i=0;i<=3;i++)    /*保存color二进制位到数组*/

{

bits[i]=color%2;

color=color/2;

}

for(i=0;i<=3;i++)    /*循环写4个位面的值*/

{

temp=0x00;

outportb(0x3ce,2);    /*往端口3ce送2说明位面可写*/

outportb(0x3c5,i);    /*选择可写位面,其他位面屏蔽*/

cbit=7-x%8;    /*象素点位于字节的具体哪一位*/

if(cbit==0)    /*象素点位于字节的第0位*/

{

if(bits[i]==0)    /*位面i的对应字节位的值为0*/

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);    /*将该字节的值与temp或运算*/

}

else if(bits[i]==1)

{

temp=0x01;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}    /*位面i对应字节值为1*/

}

else if(cbit==1)    /*位于字节的第1位*/

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x02;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==2)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x04;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==3)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x08;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==4)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x10;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==5)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x20;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==6)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x40;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

else if(cbit==7)

{

if(bits[i]==0)

{

temp=0x00;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

else if(bits[i]==1)

{

temp=0x80;

videobuffer[80*y+x/8]=(videobuffer[80*y+x/8]|temp);

}

}

}

}

/*进入12h图形模式*/

setvideomode()

{

union REGS inregs,outregs;

inregs.h.ah=0x00;

inregs.h.al=0x12;

int86(0x10,&inregs,&outregs);

}

main()

{

unsigned char far *videobuffer=(char far *)0xa0000000;

int i;

setvideomode();

for(i=0;i<=639;i++)

setpointcolor(i,200,15,videobuffer);

getch();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值