亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實(shí)現(xiàn)bmp格式圖像讀寫(xiě)

 更新時(shí)間:2021年10月25日 11:22:09   作者:SSS的博客  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)bmp格式圖像讀寫(xiě),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

bmp格式圖像有一個(gè)特點(diǎn)就是這類(lèi)數(shù)據(jù)被分為四個(gè)部分:

1.位圖文件頭(Bitmap File Header) ,大?。?4字節(jié)

主要包括位圖文件大小和位圖文件類(lèi)型信息

2.位圖信息頭(Bitmap Info Header),大?。?0字節(jié)

主要包括:位圖的寬度和高度,像素為單位、每個(gè)像素所占位數(shù)(1黑白圖像),(4-16色圖)、(8-256色圖)、(24-真彩色圖),新的BMP格式可以支持32位色。 還有其它水平和垂直分辨力(單位:像素/米)等  

3.顏色表(Color Map),大?。?個(gè)字節(jié)

三大類(lèi):藍(lán)色分量、綠色分量、紅色分量

4.位圖數(shù)據(jù)(Data Body)

對(duì)于2色位圖用1位就可以表示該像素,那么1個(gè)字節(jié)就可以?xún)?chǔ)存8個(gè)像素的顏色值

對(duì)于16色位圖,用4個(gè)字節(jié)表示一個(gè)像素顏色,那么一個(gè)字節(jié)可以?xún)?chǔ)存2個(gè)像素顏色值

對(duì)于256色位圖,1個(gè)字節(jié)剛好儲(chǔ)存1個(gè)像素的顏色值

對(duì)于真彩色位圖,則需要3個(gè)字節(jié)才能表示一個(gè)像素的顏色值

1.讀bmp圖像

bool readBmp(char *bmpName)
{
 //二進(jìn)制讀方式打開(kāi)指定的圖像文件
    FILE *fp=fopen(bmpName,"rb");
 if(fp==0) return 0;
 
 
 //跳過(guò)位圖文件頭結(jié)構(gòu)BITMAPFILEHEADER
 fseek(fp, sizeof(BITMAPFILEHEADER),0);
 
 
 //定義位圖信息頭結(jié)構(gòu)變量,讀取位圖信息頭進(jìn)內(nèi)存,存放在變量head中
 BITMAPINFOHEADER head;  
 fread(&head, sizeof(BITMAPINFOHEADER), 1,fp); 
 
 //獲取圖像寬、高、每像素所占位數(shù)等信息
 bmpWidth = head.biWidth;
 bmpHeight = head.biHeight;
 biBitCount = head.biBitCount;
 
 //定義變量,計(jì)算圖像每行像素所占的字節(jié)數(shù)(必須是4的倍數(shù))
 int lineByte=(bmpWidth * biBitCount/8+3)/4*4;
 
 //灰度圖像有顏色表,且顏色表表項(xiàng)為256
 if(biBitCount==8){
  //申請(qǐng)顏色表所需要的空間,讀顏色表進(jìn)內(nèi)存
  pColorTable=new RGBQUAD[256];
  fread(pColorTable,sizeof(RGBQUAD),256,fp);
 }
 
 //申請(qǐng)位圖數(shù)據(jù)所需要的空間,讀位圖數(shù)據(jù)進(jìn)內(nèi)存
 pBmpBuf=new unsigned char[lineByte * bmpHeight];
 fread(pBmpBuf,1,lineByte * bmpHeight,fp);
 
 //關(guān)閉文件
 fclose(fp);
 
 return 1;
}

2.寫(xiě)bmp圖像

bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height, 
    int biBitCount, RGBQUAD *pColorTable)
{
 //如果位圖數(shù)據(jù)指針為0,則沒(méi)有數(shù)據(jù)傳入,函數(shù)返回
 if(!imgBuf)
  return 0;
 
 //顏色表大小,以字節(jié)為單位,灰度圖像顏色表為1024字節(jié),彩色圖像顏色表大小為0
 int colorTablesize=0;
 if(biBitCount==8)
  colorTablesize=1024;
 
 //待存儲(chǔ)圖像數(shù)據(jù)每行字節(jié)數(shù)為4的倍數(shù)
 int lineByte=(width * biBitCount/8+3)/4*4;
 
 //以二進(jìn)制寫(xiě)的方式打開(kāi)文件
 FILE *fp=fopen(bmpName,"wb");
 if(fp==0) return 0;
 
 //申請(qǐng)位圖文件頭結(jié)構(gòu)變量,填寫(xiě)文件頭信息
 BITMAPFILEHEADER fileHead;
 fileHead.bfType = 0x4D42;//bmp類(lèi)型
 
 //bfSize是圖像文件4個(gè)組成部分之和
 fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
  + colorTablesize + lineByte*height;
 fileHead.bfReserved1 = 0;
 fileHead.bfReserved2 = 0;
 
 //bfOffBits是圖像文件前三個(gè)部分所需空間之和
 fileHead.bfOffBits=54+colorTablesize;
 
 //寫(xiě)文件頭進(jìn)文件
 fwrite(&fileHead, sizeof(BITMAPFILEHEADER),1, fp);
 
 //申請(qǐng)位圖信息頭結(jié)構(gòu)變量,填寫(xiě)信息頭信息
 BITMAPINFOHEADER head; 
 head.biBitCount=biBitCount;
 head.biClrImportant=0;
 head.biClrUsed=0;
 head.biCompression=0;
 head.biHeight=height;
 head.biPlanes=1;
 head.biSize=40;
 head.biSizeImage=lineByte*height;
 head.biWidth=width;
 head.biXPelsPerMeter=0;
 head.biYPelsPerMeter=0;
 //寫(xiě)位圖信息頭進(jìn)內(nèi)存
 fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp);
 
 //如果灰度圖像,有顏色表,寫(xiě)入文件 
 if(biBitCount==8)
  fwrite(pColorTable, sizeof(RGBQUAD),256, fp);
 
 //寫(xiě)位圖數(shù)據(jù)進(jìn)文件
 fwrite(imgBuf, height*lineByte, 1, fp);
 
 //關(guān)閉文件
 fclose(fp);
 
 return 1;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的詳細(xì)流程

    win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的詳細(xì)流程

    這篇文章主要介紹了win10系統(tǒng)VS2019配置點(diǎn)云庫(kù)PCL1.12.1的教程與經(jīng)驗(yàn)總結(jié),本文記錄小白在配置過(guò)程中踩過(guò)的一些小坑,需要的朋友可以參考下
    2022-07-07
  • c語(yǔ)言中的文件加密與解密

    c語(yǔ)言中的文件加密與解密

    這篇文章主要介紹了c語(yǔ)言中的文件加密與解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • opencv實(shí)現(xiàn)棋盤(pán)格檢測(cè)

    opencv實(shí)現(xiàn)棋盤(pán)格檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)棋盤(pán)格檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中inet_pton、inet_ntop函數(shù)的用法

    C++中inet_pton、inet_ntop函數(shù)的用法

    這篇文章主要介紹了C++中inet_pton、inet_ntop函數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++模擬鍵盤(pán)按鍵的實(shí)例

    C++模擬鍵盤(pán)按鍵的實(shí)例

    今天小編就為大家分享一篇C++模擬鍵盤(pán)按鍵的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • C語(yǔ)言折半查找法的超詳細(xì)講解

    C語(yǔ)言折半查找法的超詳細(xì)講解

    折半查找法也叫做?分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪?半中,再重復(fù)上述步驟知道找到?標(biāo)key,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言折半查找法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 用c語(yǔ)言實(shí)現(xiàn)《狼人殺》游戲發(fā)牌系統(tǒng)

    用c語(yǔ)言實(shí)現(xiàn)《狼人殺》游戲發(fā)牌系統(tǒng)

    大家好,本篇文章主要講的是用c語(yǔ)言實(shí)現(xiàn)《狼人殺》游戲發(fā)牌系統(tǒng),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 深入分析Visual C++進(jìn)行串口通信編程的詳解

    深入分析Visual C++進(jìn)行串口通信編程的詳解

    本篇文章是對(duì)Visual C++進(jìn)行串口通信編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++編寫(xiě)推箱子小游戲

    C/C++編寫(xiě)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C/C++編寫(xiě)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論