全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1110
推到 Plurk!
推到 Facebook!

800x600 16色直接繪點函式

尚未結案
sigmaccc
一般會員


發表:32
回覆:40
積分:14
註冊:2003-11-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-15 15:18:40 IP:203.204.xxx.xxx 未訂閱
小弟寫了一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-06 08:39:27 IP:218.80.xxx.xxx 未訂閱
您好,看看下面的代碼您是否能參考。  
 
#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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-09 08:02:39 IP:203.204.xxx.xxx 未訂閱
感謝Leway兄提供的資訊。 不過可惜提供的是640*480 256色的資訊。 小弟目前的問題是800*600 16色。
系統時間:2024-05-03 3:35:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!