⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initreal.c

📁 学生成绩管理系统,C语言开发,图形界面,希望对大家有所帮助
💻 C
字号:
#include<dos.h> 
#include<stdio.h> 
#define MAXX 1024 
#define MAXY 768 
void selectpage(int page){ 
union REGS r; 
r.x.ax=0x4f05; 
r.x.bx=0; 
r.x.dx=page; 
int86(0x10,&amt;r,&amt;r); 
} 
void init_realcolor(void){ 
union REGS r; 
r.x.ax=0x4f02; 
r.x.bx=0x118; 
int86(0x10,&amt;r,&amt;r); 
} 
void exit_realcolor(unsigned mode){ 
union REGS r; 
r.x.ax=0x4f02; 
r.x.bx=mode; 
int86(0x10,&amt;r,&amt;r); 
} 
void exputpixel(int x,int y,char red,char green,char blue,int xor){ 
long i; 
static int t=0; 
int tt=0; 
char far *p=0xa0000000; 
if((x<0)||(x>MAXX)||(y<0)||(y>MAXY))return; 
i=y; 
i=i<<12; 
i+=(x<<2); 
tt=i>>16; 
i&amt;=0xffff; 
if(t!=tt)selectpage(tt); 
if(xor==0) 
{ 
*(p+i+0)=red; 
*(p+i+1)=green; 
*(p+i+2)=blue; 
*(p+i+3)=0xff; 
} 
else 
{ 
*(p+i)^=red; 
*(p+i+1)^=green; 
*(p+i+2)^=blue; 
} 
t=tt; 
} 
void getpixel(int x,int y,char *red,char *green,char *blue){ 
long i; 
static int t=0; 
int tt=0; 
char far *p=0xa0000000; 
if((x<0)||(x>MAXX)||(y<0)||(y>MAXY))return; 
i=y; 
i=i<<12; 
i+=(x<<2); 
tt=i>>16; 
i&amt;=0xffff; 
if(t!=tt)selectpage(tt); 
*red=*(p+i+0); 
*green=*(p+i+1); 
*blue=*(p+i+2); 
t=tt; 
} 
void brenhamline(int x1,int y1,int x2,int y2,char color1,char color2,char color3,int xor){ 
int ix,iy,i,dx,dy; 
float k,d; 
dx=x2-x1;dy=y2-y1; 
if(dx==0) 
{ 
if(dy>0) 
{ 
for(;y1<=y2;y1++)exputpixel(x1,y1,color1,color2,color3,xor); 
return; 
} 
else 
{ 
for(;y2<=y1;y2++)exputpixel(x1,y2,color1,color2,color3,xor); 
return; 
} 
} 
k=(float)dy/dx; 
d=-0.5; 
if(k<0) 
{ 
ix=x2;iy=y2; 
} 
else 
{ 
ix=x1;iy=y1; 
} 
for(i=0;i<=dx;i++) 
{ 
if(k>=0) 
{ 
exputpixel(ix,iy,color1,color2,color3,xor); 
} 
else 
{ 
exputpixel(ix-2*i,iy,color1,color2,color3,xor); 
} 
ix++; 
if(k>=0)d+=k; 
else d+=(-k); 
if(d>=0) 
{ 
iy++; 
d=d-1; 
} 
} 
} 
void fill_area(int left,int right,int top,int bottom,int red,int green,int blue,int xor){ 
int i; /*填充矩形区域。*/ 
i=top; 
for(;i<bottom;i++) 
{ 
brenhamline(left,i,right,i,red,green,blue,xor); 
} 
} 
/*以下为画圆函数。*/ 
void copy(int ix,int iy,int x,int y,int red,int green,int blue,int xor,int e){ 
exputpixel(ix+x,iy+y,red,green,blue,xor); 
exputpixel(ix+x,-iy+y,red,green, blue,xor); 
exputpixel(-ix+x,-iy+y,red,green,blue,xor); 
exputpixel(-ix+x,iy+y,red,green,blue,xor); 
if(!e) 
{ 
exputpixel(iy+x,ix+y,red,green,blue,xor); 
exputpixel(iy+x,-ix+y,red,green,blue,xor); 
exputpixel(-iy+x,-ix+y,red,green,blue,xor); 
exputpixel(-iy+x,ix+y,red,green,blue,xor); 
} 
} 
void midcircle(int x,int y,int r,int red,int green,int blue,int xor){ 
int ix,iy,d; 
ix=0;iy=r;d=1-r; 
exputpixel(ix+x,iy+y,red,green,blue,xor); 
exputpixel(ix+x,-iy+y,red,green,blue,xor); 
exputpixel(iy+x,ix+y,red,green,blue,xor); 
exputpixel(-iy+x,ix+y,red,green,blue,xor); 
while(ix<iy) 
{ 
if(d<0) 
{ 
ix++;d+=2*ix+3; 
} 
else 
{ 
ix++;iy--;d+=2*(ix-iy)+5; 
} 
copy(ix,iy,x,y,red,green,blue,xor,0); 
} 
exputpixel(ix+x,ix+y,red,green,blue,xor); 
exputpixel(ix+x,-ix+y,red,green,blue,xor); 
exputpixel(-ix+x,-ix+y,red,green,blue,xor); 
exputpixel(-ix+x,ix+y,red,green,blue,xor); 
} 
/*显示一个ASC字符串。*/ 
void DisplayAscS(char *s,int x,int y,int red,int green,int blue,int distance,int xor,float c){ 
unsigned char font[32],hz; 
FILE *fp; 
long dst; 
int i,j,k,co=3; 
fp=fopen("ASC1616","rb"); 
for(co=0;s[co]!='\0';co++) 
{ 
dst=s[co]*32L; 
fseek(fp,dst,SEEK_SET); 
fread(font,32,1,fp); 
rewind(fp); 
for(k=0;k<16;k++) 
for(i=0;i<2;i++) 
for(j=0;j<8;j++) 
{ 
hz=font[k*2+i];hz&amt;=(0x80>>j); 
if(hz)exputpixel(x+(8*i+j)+(16+distance)*co,y+k*c,red,green,blue,xor); 
} 
} 
fclose(fp); 
} 
/*显示一个ASC字符。*/ 
void DisplayAscC(char ch,int x,int y,int red,int green,int blue,int xor,float c){ 
unsigned char font[32],hz; 
FILE *fp; 
long dst; 
int i,j,k; 
fp=fopen("ASC1616","rb"); 
dst=ch*32L; 
fseek(fp,dst,SEEK_SET); 
fread(font,32,1,fp); 
rewind(fp); 
for(k=0;k<16;k++) 
for(i=0;i<2;i++) 
for(j=0;j<8;j++) 
{ 
hz=font[k*2+i];hz&amt;=(0x80>>j); 
if(hz)exputpixel(x+(8*i+j),y+k*c,red,green,blue,xor); 
} 
fclose(fp); 
} 
/*混合显示16点阵ASC和汉字。*/ 
void MixtureShow16(unsigned char *p,int x,int y,int red,int green,int blue,int distance,int xor,float cx,float cy){ 
FILE *fp; 
unsigned i,j,k,qu,wei,rec,n,c1,c2; 
long dst; 
unsigned char font[32],hz,isasc; 
if((fp=fopen("hzk16","rb"))==NULL) 
{ 
printf("can not open the file!\n");exit(0); 
} 
for(n=0;*(p+n)!='\0';) 
{ 
isasc=*(p+n); 
if((isasc>>7)==0) 
{ 
DisplayAscC(*(p+n),x,y,red,green,blue,xor,cy); 
x+=(16+distance); 
n+=1; 
continue; 
} 
qu=*(p+n)-0xa0; 
wei=*(p+n+1)-0xa0; 
rec=(qu-1)*94+wei-1; 
dst=rec*32L; 
fseek(fp,dst,SEEK_SET); 
fread(font,32,1,fp); 
rewind(fp); 
for(k=0;k<16;k++) 
for(i=0;i<2;i++) 
for(j=0;j<8;j++) 
{ 
hz=font[k*2+i]; 
hz&amt;=(0x80>>j); 
if(hz) 
{ 
if(cx<1&amt;&amt;cy<1) 
if(((8*i+j)>(int)(1/cx))==0&amt;&amt;(k>(int)(1/cy))==0) 
exputpixel(x+(8*i+j)*cx,y+k*cy,red,green,blue,xor); 
if(cx<1&amt;&amt;cy>=1) 
if(((8*i+j)>(int)(1/cx))==0) 
for(c2=0;c2<cy;c2++) 
exputpixel(x+(8*i+j)*cx,y+k*cy+c2,red,green,blue,xor); 
if(cy<1&amt;&amt;cx>=1) 
if((k>(int)(1/cy))==0) 
for(c1=0;c1<cx;c1++) 
exputpixel(x+(8*i+j)*cx+c1,y+k*cy,red,green,blue,xor); 
if(cx>=1&amt;&amt;cy>=1) 
for(c1=0;c1<cx;c1++) 
for(c2=0;c2<cy;c2++) 
exputpixel(x+(8*i+j)*cx+c1,y+k*cy+c2,red,green,blue,xor); 
} 
} 
x+=(16+distance); 
n+=2; 
} 
fclose(fp); 
} 
/*显示24点阵汉字*/ 
void chinashow24(unsigned char *p,int x,int y,int red,int green,int blue,int distance,int xor,float cx,float cy){ 
FILE *fp; 
unsigned i,j,k,qu,wei,rec,n,c1,c2; 
long dst; 
unsigned char font[72],hz; 
if((fp=fopen("hzk24k","rb"))==NULL){ 
printf("can not open the file!\n");exit(0);} 
for(n=0;*(p+n)!='\0';n+=2) 
{ 
qu=*(p+n)-0xa0;wei=*(p+n+1)-0xa0; 
rec=(qu-1)*94+wei-1; 
dst=rec*72L; 
fseek(fp,dst,SEEK_SET); 
fread(font,72,1,fp); 
rewind(fp); 
for(k=0;k<24;k++) 
for(i=0;i<3;i++) 
for(j=0;j<8;j++) 
{ 
hz=font[k*3+i]; 
hz&amt;=(0x80>>j); 
if(hz) 
{ 
if(cx<1&amt;&amt;cy<1) 
if(((8*i+j)>(int)(1/cy))==0&amt;&amt;(k>(int)(1/cx))==0) 
exputpixel(x+k*cx,y+(8*i+j)*cy,red,green,blue,xor); 
if(cx<1&amt;&amt;cy>=1) 
if((k>(int)(1/cx))==0) 
for(c2=0;c2<cy;c2++) 
exputpixel(x+k*cx,y+(8*i+j)*cy+c2,red,green,blue,xor); 
if(cy<1&amt;&amt;cx>=1) 
if(((8*i+j)>(int)(1/cy))==0) 
for(c1=0;c1<cx;c1++) 
exputpixel(x+k*cx+c1,y+(8*i+j)*cy,red,green,blue,xor); 
if(cx>=1&amt;&amt;cy>=1) 
for(c1=0;c1<cx;c1++) 
for(c2=0;c2<cy;c2++) 
exputpixel(x+k*cx+c1,y+(8*i+j)*cy+c2,red,green,blue,xor); 
} 
} 
x+=(24+distance); 
} 
fclose(fp); 
} 
void showbmprealcolor32(char *s,int x,int y){ 
FILE *fp; /*注意:BMP图的长和宽必须是4的倍数,才能正常显示!*/ 
int width,length,i,j,k; 
char r,g,b,buffer[MAXX*3]; 
if((fp=fopen(s,"rb"))==NULL) 
{ 
printf("can not open file");exit(0); 
exit_realcolor(0x03); 
} 
fseek(fp,18,SEEK_SET); 
fread(&amt;width,4,1,fp); 
fread(&amt;length,4,1,fp); 
fseek(fp,54,SEEK_SET); 
k=(width>4)?(4-width>4):0; 
for(i=0;i<length;i++) 
{ 
fread(buffer,width*3,1,fp); 
for(j=0;j<(width*3);j+=3) 
{ 
exputpixel(j/3+x,length-i+y,buffer[j],buffer[j+1],buffer[j+2],0); 
} 
fseek(fp,k,SEEK_CUR); 
} 
fclose(fp); 
} 


void ex_main(){ 
char *s="Rdesk.bmp"; 
char *s1="window.bmp"; 
char *s2="你好吗!我很好。"; 
char *s3="fengmian.bmp"; 
unsigned char red,green,blue; 
int x1,y1,i=0,update=0; 
int pox=450,poy=350,l=100,w=100,mx,my; 
init_realcolor(); 
brenhamline(100,0,600,0,100,100,0,0); 
fill_area(100,200,0,200,200,55,100,0); 
midcircle(500,500,100,4,88,235,0); 
DisplayAscC(s[1],300,300,36,91,216,0,1); 
MixtureShow16(s1,400,400,36,91,216,2,0,1,1); 
chinashow24(s2,600,400,237,235,221,2,1,1,1); 
getch(); 
showbmprealcolor32(s,0,0); 
getch(); 
showbmprealcolor32(s1,0,0); 
getpixel(293,32,&amt;red,&amt;green,&amt;blue); 
getch(); 
exit_realcolor(0x03); 
printf(">d,>d,>d,",red,green,blue); 
getch(); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -