<del id="dhfrq"></del>

    1. <tr id="dhfrq"></tr>
      成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
      現在位置:范文先生網>理工論文>計算機論文>Turbo C位圖和BMP位圖格式分極及應用

      Turbo C位圖和BMP位圖格式分極及應用

      時間:2023-02-20 22:51:42 計算機論文 我要投稿
      • 相關推薦

      Turbo C位圖和BMP位圖格式分極及應用

         近來,圖像功能在計算機上的應用十分廣泛,一種方便快捷而實用的方法是首先利用圖像掃描儀將圖像數據自動生成并存入計算機,再利用Windows的PAINTBRUH功能進行加工修改,成為獨立的圖像文件。但是,仍然有一個問題:PAINTBRUH軟件只能在Windows環境下運行。因此要顯示一幅圖像(.MSP位圖、.BMP位圖、PCX位圖),也要運行龐大的Windows,顯然不方便。為此,筆者編寫了一個BMP位圖文件直接顯示在屏幕上的程序。利用Turbo C位圖格式,將BMP格式進行轉換,實現了這一功能。
      一、Turbo C位圖格式
      Borlond公司的Turbo C是目前在微機上最為流行的C語言版本。它為軟件開發者提供了豐富的屏幕操作與圖形功能函數。其中getimage( )函數用于將屏幕內的某矩形區域復制到內存緩沖區,putimage( )函數將內存緩沖區中的內容再復制到屏幕上。但由于圖像事先還沒有出現在屏幕上,所以,不能使用getimage( )函數填寫供putimage( )函數顯示的內存圖像數據。不過可以把圖像數據按getimage( )函數產生的格式填于內存緩沖區中,然后調用putimage( )函數,顯示內存緩沖區圖像,下面分析getimage( )函數產生的格式:
      getimage (int letf, int top, int night, int bottm, *buf)
      其中,left, top——矩形區域左上角坐標(x,y)。
      right, bottom——矩形區域右上角坐標(x,y)。
      * buf——指向存儲屏幕數據的內存指針。
      在內存中,圖像數據是按行存放的。頭兩個字節為圖像的寬度,接下去兩個字節為圖像的高度(均為低字節在前,高字節在后)。后面是真正的圖像數據,它以圖像的寬度為單位,先是圖像的第一行第三位面的內容,然后是第一行第二位面的內容;第一行第一位面的內容;第一行第零位面的內容。第一行完后,接第二行的四個位面,第三行的四個位面等等。當屏幕狀態為16色時,則需4個彩色頁面。這時,如果圖像的寬度為8的整數倍時,則每
      行所需的字節數為:
      number=(right-left+8) 18*4
      如果圖像的寬度不為8的倍數據時,則
      number=(ceil ((right-left)/8)*4)
      其中,ceil (righ-left)8為取大于(right-left)/8的最小整數
      則圖像數據所需字節總數為:
      number * (bottom-top+1)
      則所需內存緩沖區字節總數為:
      6+number * (bottom -top+1)
      這是因為頭四個字節存放圖像的寬和高,而緩沖區最后2個字節無意義,可以填零。
      @@T5S04700.GIF;圖 1@@
      這樣,每行每頁面的字節數為:
      p=number/4
      如圖1所示(設寬、高為16×16)
      其中,圖像的真正數據在每個頁面的前m列,即:
      當寬度為8的倍數據時,m=P-1,此時每頁面的最后一列可為零。而當寬度不為8的倍
      數時,m=P。
      結合圖1 m=2,即數據在每頁面的前2列。
      二、BMP位圖格式
      MS Windows的.BMP圖像文件可以表示單色或直至24位的彩色圖像,.BMP文件是與設備無關的。.BMP文件分為文件首部和文件體兩部分。文件首部描述文件和圖像的有關參數和彩色表,主體是圖像的位圖數據。.BMP文件的格式如表1所示。
      @@T5S04701.GIF;表1 BMP文件的格式@@
      @@T5S04702.GIF;表2 BMP與VGA彩色編碼對照@@
      .BMP文件的文件體記錄圖像的位圖數據。從圖像的左下角開始依次掃描每根掃描線。對于單色,每個象素用1位表示;16色用4位表示一個象素,256色用一個字節,而24位彩色用3個字節。
      但.BMP位圖的彩色編碼與VGA彩色編碼不同,必須經過轉換才能用C語言在屏幕上顯示。表2給出了.BMP位圖彩色編碼與VGA彩色編碼的對照。
      三、.BMP位圖向Turbo C位圖的轉換
      當VGA視頻內存在選擇640×480模式時占用4個位面。每個位面上的一位對應一個點。而.BMP位圖則采用壓縮法的組織形式,兩者顯然不同。因此,也需要一個變換過程,見圖2。
      根據這一原理,首先進行彩色編碼轉換,然后將.BMP位圖數轉換成C位圖格式,寫入內存緩沖區的適當位置。
      @@T5S04703.GIF;圖2 從BMP位圖到VGA視頻內存的變換過程@@
      為了便于參考,筆者編制了一個程序。本程序只要給出.BMP文件的名字,程序會自行在屏幕上顯示出來。需說明的是,本程序只能用于小于64K的圖像。但也可以將一幅大的.BMP圖像分成若干小圖像即可。對圖像文件格式轉換感興趣的讀者,也不難將本程序拓展到自己的應用領域。程序附后。
      # include <stdio.h>
      # include <graphics.h>
      # include <alloc.h>
      # include <math.h>
      unsigned char convert ();
      main()
      {
      int 1, i, j, k, q, h;
      int driver=VGA, mode=VGAHI;
      int lenth, high, number, p, m;
      unsigned size;
      unsigned char ch, a[8], b[4], e[4][8];
      FILE *fp; char *s;
      fp=fopen (“party. bmp” , “rb”);
      fseek (fp, 18, 0); lenth=getw (fp);
      /* graphics width */
      fseek (fp, 22, 0); high=getw (fp);
      #/* graphics high */
      #if ((lenth%8)==0) number= (lenth+8)/8*4
      #/* bytes of each line */
      # else number=4*(ceil ((double)1enth/8));
      up=number/4;
      mif ((lenth%8)!=0) m=p;
      {/* bytes of each line/4 */
      else m=p-1;
      size=6+number*(high+1)
      /* need memory bytes of graphics */
      if ((s=char *) malloc (size))==NULL)
      { printf (“malloc error !\n”); exit (0);}
      s[0]=lenth & 0x00ff; s[1]=(lenth& 0xf

      f00)>>8;
      s[2]=high & 0x00ff; s[3]=(high & 0xff00)>>8;
      for (i=4; i<size; i++) s[i]=0;
      fseek (fp, 118,0);
      #for (l=high-1; 1>=0; 1--)
      #for (q=0; q<m; q++) {
      # for (k=0; k<4; k++) {
      #ch=getc (fp);
      uch=convert (ch);
      ma[0]=ch&0x1; a[1]=(ch&0x2)>>1;
      {a[2]=(ch&0x4)>>2;a[3]=(ch&0x8)>>3;
      a[4]=(ch&0x10)>>4;a[5]=(ch&x20)>>5;
      a[6]=(ch&0x40)>>6;a[7]=(ch&0x80)>>7;
      h=7;
      for (j=0; j<2; i++)
      for (j=0; j<4; i++) {
      e[j][i+2*k]=a[h];
      h--;
      }
      }
      #for (i=0; i<4; i++) {
      # b[i]=(e[i][0]<<7)+(e[i][1]<<6)+(e[i][2]<<5)+
      #(e[i][3]<<4)+(e[i][4]<<3)+(e[i][5]<<2)+
      #(e[i][6]<<1)+(e[i][7]);
      u s[4+number *1+q]=b[0]; s[4+number *1+q+p]=b[1];
      m s[4+number *1+q+2*p]=b[2]; s[4+number *1+q+3*p]=b[3];
      { }
      fclose (fp); initgraph (&driver, &mode, “d:\\tc”);
      putimage (0, 0, s, 0); getch();
      free(s): closegraph();
      }
      unsigned char convert (unsigned char ch)
      /* bmp color convert vga color */
      {
      unsigned char c[2];
      int i;
      #c[0]=(ch&0xf0)>>4;
      #c[1]=ch&0x0f;
      #for (i=0; i<2; i++) {
      #if (c[i]==0x01) {c[i]=0x04; continue;}
      uif (c[i]==0x03) {c[i]=0x6; continue;}
      mif (c[i]==0x04) {c[i]=0x01; continue;}
      {if (c[i]==0x06) {c[i]=0x03; continue;}
      if (c[i]==0x07) {c[i]=0x8; continue;}
      if (c[i]==0x08) {c[i]=0x07; continue;}
      if (c[i]==0x09) {c[i]=0xc; continue;}
      if (c[i]==0x0b) {c[i]=0xe; continue;}
      if (c[i]==0x0c) {c[i]=0x9; continue;}
      if (c[i]==0x0e) c[i]=0x0b;
      }
      ch=(c[0]<<4)+c[1];
      return ch;
      #}


      【Turbo C位圖和BMP位圖格式分極及應用】相關文章:

      SDH專用電路套片DTT1C08A和DTT1C20A及其應用08-06

      比和比的應用08-16

      二極管和發光二極管教案示例08-17

      分·和作文04-02

      C8051F020中的ADC應用要素08-06

      Sigmatek C-IPC在螺栓緊固機械上的應用08-06

      簡歷的內容和格式08-15

      百分率的應用08-16

      TMS320C54x系列DSP中的應用08-06

      主站蜘蛛池模板: 樱花草视频www日本韩国| 亚洲熟妇少妇任你躁在线观看无码| 国产精品爆乳奶水无码视频免费| 久久亚洲精品成人av秋霞| 亚洲综合一区国产精品| 在线视频不卡在线亚洲| 亚洲av永久一区二区| 日韩幕无线码一区中文| 国产专区一va亚洲v天堂| 九九热免费精品视频在线| 久久一日本道色综合久久| 国产亚洲精品久久久久久无亚洲 | 国产精品福利自产拍久久| 国内免费视频成人精品| 亚洲综合日韩av在线| 国产精品毛片一区视频播| 深夜福利成人免费在线观看 | 狠狠躁夜夜躁人人爽天天天天| 久久久久久亚洲精品成人| 亚洲欧洲精品一区二区| 欧美丰满熟妇xxxx性ppx人交| 国产成人精品一区二区无| 国产成人午夜福利在线观看| 国产精品久久国产精麻豆| 精品无码国产日韩制服丝袜| 国产精品青草久久久久福利99| 无码人妻精品一区二区三区下载| 亚洲精品一区久久久久一品av| 日韩一区二区三区水蜜桃| 国产成人无码免费看视频软件| 亚洲综合久久精品国产高清| 青青青久热国产精品视频| 男女动态无遮挡动态图| 人妻换着玩又刺激又爽| 韩国免费a级毛片久久| 日本熟妇浓毛| 国产69精品久久久久99尤物| 人妻少妇久久中文字幕| 韩国免费a级毛片久久| 国产一区二区三区不卡视频| 不卡一区二区国产在线|