在VGA上实现灰度显示的程序实例

王朝other·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

在VGA上实现灰度显示的程序实例

在VGA上实现灰度显示的程序实例

#include"stdio.h"

#include"dos.h"

#include<conio.h>

#include<math.h>

#include<math.h>

#include<graphics.h>

unsigned long pre_cale_y2[480];

typedef unsigned char byte;

union REGS reg;

struct SREGS inreg;

typedef struct

{

byte red;

byte grn;

byte blu;

}

rgb;

typedef rgb palette_Register[256];

void set_palette(palette_Register hue)

{

reg.x.ax=0x1012;

segread(&inreg);

inreg.es=inreg.ds;

reg.x.bx=0;

reg.x.cx=256;

reg.x.dx=(int)&hue[0];

int86x(0x10,&reg,&reg,&inreg);

}

void init_palette_2(palette_Register color)

{

int i;

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

{

color[i].red=0;

color[i].grn=0;

color[i].blu=(int)(1.8*i+0.5);

}

for(i=36;i<72;i++)

{

color[i].red=0;

color[i].grn=(int)(1.8*(i-36)+0.5);

color[i].blu=0;

}

for(i=72;i<108;i++)

{

color[i].red=0;

color[i].grn=(int)(1.8*(i-72)+0.5);

color[i].blu=(int)(1.8*(i-72)+0.5);

}

for(i=108;i<144;i++)

{

color[i].red=(int)(1.8*(i-108)+0.5);

color[i].grn=0;

color[i].blu=0;

}

for(i=144;i<180;i++)

{

color[i].red=(int)(1.8*(i-144)+0.5);

color[i].grn=0;

color[i].blu=(int)(1.8*(i-144)+0.5);

}

for(i=180;i<216;i++)

{

color[i].red=(int)(1.8*(i-180)+0.5);

color[i].grn=(int)(1.8*(i-180)+0.5);

color[i].blu=0;

}

for(i=216;i<252;i++)

{

color[i].red=(int)(1.8*(i-216)+0.5);

color[i].grn=(int)(1.8*(i-216)+0.5);

color[i].blu=(int)(1.8*(i-216)+0.5);

}

}

void precale()

{

unsigned int j;

for(j=0;j<480;j++)

{

pre_cale_y2[j]=640*j;

}

}

void plot(int x,int y,char color)

{

long L_offset;

int offset,page;

char far *address;

precale();

if((x<640)&&(y<480))

{

L_offset=pre_cale_y2[y]+x;

page=(L_offset>>16);

offset=L_offset&65535;

outportb(0x3c4,0xe);

outportb(0x3c5,(page&0xf)^0x2);

address=(char far *)(0xa0000000L+offset);

*address=color;

}

}

void put_pix(int x,int y,char color,char inten)

{

char col;

col=((35+1)*(color-1)+inten)&255;

plot(x,y,col);

}

main()

{

int i,j;

palette_Register color;

precale();

reg.h.ah=0;

reg.h.al=0x13;

int86(0x10,&reg,&reg);

init_palette_2(color);

set_palette(color);

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

for(j=0;j<35;j++)

put_pix(i,j,3,j);

getchar();

closegraph();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航