(6)內(nèi)存釋放
(1)申請(qǐng)內(nèi)存:
由于320*200是64K,而C程序允許用戶申請(qǐng)的內(nèi)存空間也只有64K,為了防止一次申請(qǐng)不到,我們可以分幾次申請(qǐng)。使用malloc()函數(shù)就可以。
(2)檢查頭文件信息區(qū):
A:判斷是不是bmp文件(若不是,則無(wú)法顯示)
B:文件是否為壓縮格式(若是,則無(wú)法處理)
C:文件是否為256色
以下給出讀取頭文件信息到內(nèi)存的代碼:
read(fp,&bmp256->file,sizeof(bitmapfile));
read(fp,&bmp256->info,sizeof(bitmapinfo));
以下是檢測(cè)bmp文件格式的函數(shù):
void Check_Bmp(bmp_picture_ptr bmp_ptr)
{
if(bmp_ptr->file.bfType!=0x4d42) /*檢測(cè)是不是bmp文件*/
{
printf("Not a BMP file! ");
exit(1);
}
if(bmp_ptr->info.biCompression!=0) /*檢測(cè)是不是壓縮文件,1表示壓縮,0表示沒(méi)壓縮*/
{
printf("Can not display a compressed bmp file! ");
exit(1);
}
if(bmp_ptr->info.biBitCount!=8) /*檢測(cè)是不是256色*/
{
printf("Not a index 256color bmp file! ");
exit(1);
}
}
(3)和(4)前面有介紹,這兒省略。
(5)顯示圖象
假設(shè)bmp文件的調(diào)色板區(qū)已寫入計(jì)算機(jī)調(diào)色板,bmp文件圖象存儲(chǔ)區(qū)也已寫到內(nèi)存,以下給出具體的顯示到屏幕的函數(shù)
void BMP_Show_Buffer2(bmp_picture_ptr image)
{
memcpy((char far *)video_buffer,(char far *)image->buffer,(unsigned int)info->biWidth*info->biHight/2)
}
(6)釋放內(nèi)存
void BMP_Delete(bmp_picture_ptr image)
{
free(image->buffer);
}
好了,經(jīng)過(guò)以上幾步,基本上你的bmp文件就能在C中顯示了。當(dāng)然前提是你使用256色的圖形驅(qū)動(dòng)。也就是你的int gdrive=DETECT應(yīng)該改為int gdrive=6;如果你僅僅顯示16色的文件,就沒(méi)有必要了。
相關(guān)推薦:2010年全國(guó)計(jì)算機(jī)等級(jí)考試考試報(bào)考指南北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |