800x600 16色直接繪點函式 |
尚未結案
|
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
小弟寫了一個800x600 16色直接繪點函式,雖然可以用但一旦執行完畢,就無法
執行秀PCX圖檔的函式了。請問執行完這個繪點函式是否還要還原什麼暫存器才能正常。謝謝. void putpixel800x600_16c(short x,short y,short color)
{
long addr;
short bitposition,shift,i;
char origin;
static long table800x600_16c[600]; if(table800x600_16c[1]==0)
{ for(i=0;i<600;i ) table800x600_16c[i]=(long)100*i; }
addr=(table800x600_16c[y] (x>>3));
bitposition=7-x&7;
origin=peekb((unsigned)0xa000,(unsigned)addr);
shift=1<
|
Leway
一般會員 發表:43 回覆:71 積分:22 註冊:2003-07-29 發送簡訊給我 |
您好,看看下面的代碼您是否能參考。
#include "dos.h" #include "stdio.h" selectpage(register char page) { union REGS r; r.x.ax=0x4f05; r.x.bx=0; r.x.dx=page; int86(0x10,&r,&r); } unsigned char set_SVGA_mode(int vmode) /*設置SVGA模式*/ { union REGS r; r.x.ax=0x4f02; r.x.bx=vmode; int86(0x10,&r,&r); return(r.h.ah); } unsigned int get_SVGA_mode() /* 取得當前SVGA模式 */ { union REGS r; r.x.ax=0x4f03; int86(0x10,&r,&r); return(r.x.bx); } main() { char buffer[640],page_new=0,page_old=0; int i,j,k,n,r,g,b,savemode,width,length; long position; FILE *fp; puts("This is a 256 bmp viewer!"); puts("Input filename:"); gets(buffer); if((fp=fopen(buffer,"rb"))==NULL) {printf("Can't open file: %s",buffer); return; } fseek(fp,28,SEEK_SET); fread(&i,2,1,fp); if(i!=8) {puts("Not a 256 color bitmap!"); fclose(fp);exit(0); } fseek(fp,18,SEEK_SET); fread(&width,4,1,fp); fread(&length,4,1,fp); savemode=get_SVGA_mode(); /* 取得當前SVGA模式 */ asm push ax asm mov ax, 0X0079 asm int 10h pop ax savemode=get_SVGA_mode(); getch(); fseek(fp,54,SEEK_SET); for(i=0;i<256;i ) {b=fgetc(fp);g=fgetc(fp);r=fgetc(fp); outportb(0x3c8,i); outportb(0x3c9,r>>2); outportb(0x3c9,g>>2); outportb(0x3c9,b>>2); fgetc(fp); } k=(width%4)?(4-width%4):0; for(j=length-1;j>=0;j--) {fread(buffer,width,1,fp); for(i=0,n=0;i |
sigmaccc
一般會員 發表:32 回覆:40 積分:14 註冊:2003-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |