計算機畢業論文-Turbo C位圖和BMP位圖格式分極及應用

學識都 人氣:1.99W
計算機畢業論文-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。