• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            bmp圖片格式學習(c++代碼)

             

            //這個程序用來讀取256*256大小的單色bmp黑白圖片,適當修改就可讀取任意大小任意
            //顏色的bmp圖片,在生成文件里,0和1表示黑白,不過用記事本查看會有亂碼
            //可以用UE查看16進制形式,沒有問題的
            #include <fstream>
            #include 
            <iostream>
            using namespace std; 
            typedef unsigned 
            char var8;
            typedef unsigned 
            int uvar32;
            typedef unsigned 
            short int uvar16;
            typedef  
            struct  { var8 Blue,Green,Red,Reserved;}  Palette;
            int main()
            {
              uvar32 Size,Offset,Height,Width,Compress,Reserved,
              InfoHeaderSize,Colors,ImportantColors,DataSize,HResolution,VResolution;
              uvar16 Planes,Bit;
              
            int i,j;
              var8 type[
            2],imdata[256][256],imdata2[1024];
              Palette Rgbquad;
              ifstream fin;
              ofstream fout;
              fin.open(
            "test.bmp",ios::binary);   
              
            /*以二進制讀方式打開該文件,一定要二進制的!路徑為存儲圖片路徑*/
              fout.open(
            "out.txt", ios::out|ios::binary);
              
            //out.txt為保存結果文件,有趣的很,加上bmp數據,改了后綴就能顯示了,我試過
              if(!fin)
              
            {
                cout
            <<"No this file!\n";
                
            return 1;
              }

              
              fin.read((
            char*)&type ,2);
              cout
            <<"file type: "<<type[0]<<type[1]<<endl;
              
            /* 兩字節的內容用來識別位圖的類型,偏移量0,結果file type: BM*/
              fin.read((
            char*)&Size ,sizeof(uvar32));
              cout
            <<"file size: "<<Size<<endl;
              
            /*整個文件的大小,偏移量2,結果file size: 8254*/
              fin.read((
            char*)&Reserved,sizeof(uvar32));
              cout
            <<"Reserved dword: "<<Reserved<<endl;
              
            /*保留,必須設置為0, 偏移量6,結果Reserved dword: 0*/
              fin.read((
            char*)&Offset  ,sizeof(uvar32));
              cout
            <<"Offset: "<<Offset<<endl;
              
            /*從文件開始到位圖數據開始之間的數據(bitmap data)之間的偏移量
               ,結果Offset: 62。位圖數據為256*256,
               65536(位圖數據)+62*8(偏移量)=(文件大小)記得是bit位
            */

              fin.read((
            char*)&InfoHeaderSize,sizeof(uvar32));
              cout
            <<"Bitmap Info Header Size: "<<InfoHeaderSize<<endl; 
              
            /*位圖信息頭(Bitmap Info Header)的長度,偏移量14,
               結果 Bitmap Info Header Size: 40
            */

              fin.read((
            char*)&Width,sizeof(uvar32));
              cout
            <<"Bitmap Width: "<<Width<<endl;
              
            /*位圖的寬度,以象素為單位,偏移量18,Bitmap Width: 256*/
              fin.read((
            char*)&Height,sizeof(uvar32));
              cout
            <<"Bitmap Height: "<<Height<<endl;
              
            /*位圖的高度,以象素為單位,如果該值是一個正數,說明圖像是倒向的,
              如果該值是一個負數,則說明圖像是正向的。偏移量22,Bitmap Height: 256
            */

              fin.read((
            char*)&Planes,sizeof(uvar16));
              cout
            <<"Bitmap Planes: "<<Planes<<endl;
              
            /*位圖的位面數(注:該值將總是1),偏移量26,Bitmap Planes: 1*/
              fin.read((
            char*)&Bit,sizeof(uvar16));
              cout
            <<"Bits per Pixel: "<<Bit<<endl;
              
            /*每個象素的位數,偏移量28,單色應該1bit,Bits per Pixel: 1*/ 
              fin.read((
            char*)&Compress,sizeof(uvar32));
              cout
            <<"Compresssion Y or N: "<<Compress<<endl;
              
            /*壓縮說明0為不壓縮,偏移量30,Compresssion Y or N: 0*/
              
            if(Compress) { fin.close();return 2;}
              fin.read((
            char*)&DataSize,sizeof(uvar32));
              cout
            <<"Data Size: "<<DataSize<<endl;
              
            /*用字節數表示的位圖數據的大小,偏移量34,256*256/8=8192,
               Data Size: 8192
            */

              fin.read((
            char*)&HResolution,sizeof(uvar32)); 
              cout
            <<"HResolution: "<<HResolution<<endl;
              
            /*用象素/米表示的水平分辨率,偏移量38,HResolution: 0*/
              fin.read((
            char*)&VResolution,sizeof(uvar32));
              cout
            <<"VResolution: "<<VResolution<<endl;
              
            /*用象素/米表示的垂直分辨率,偏移量42,VResolution: 0*/
              fin.read((
            char*)&Colors,sizeof(uvar32));
              cout
            <<"Colors: "<<Colors<<endl;
              
            //fout<<Colors;
              /*位圖使用的顏色數,應該為2,不過我試過很多次都輸出0,不影響的*/
              fin.read((
            char*)&ImportantColors,sizeof(uvar32));
              cout
            <<"ImportantColors: "<<ImportantColors<<endl;
              
            /*指定重要的顏色數。當該域的值等于顏色數時(或者等于0時),
              表示所有顏色都一樣重要。偏移量50,ImportantColors: 0
            */

              
            for(i=0;i<2;i++)
              
            {
                  fin.read((
            char*)&Rgbquad,sizeof(Palette));
                  cout
            <<int(Rgbquad.Blue)<<" "<<int(Rgbquad.Green)<<" "<<int(Rgbquad.Red)

            <<"  "<<int(Rgbquad.Reserved)<<endl;
              
              }

              
            /*調色板規范。對于調色板中的每個表項,這4個字節用下述方法來
              描述RGB的值:1字節用于藍色分量 ,1字節用于綠色分量 ,1字節用于紅色分量 
              1字節用于填充符(設置為0),對于彩色圖像R,G,B
              有各自的分量,對與黑白圖像,R=G=B=灰度級。輸出結果有 0 0 0 0,
              255 255 255 0
            */

              fin.seekg(Offset,ios::beg);
              
              
            for( i=255;i>=0;i--)
              
            {
                 
            for(j=0;j<32;j++)
                 

                  fin.read((
            char*)&imdata[i][j],sizeof(var8));
               fout
            <<imdata[i][j];
                 }

              }

              
              fout.close();
              
            /*直接把8254個像素的灰度讀入數組imdata中,由于前面調色板的格式,讀出的數據無
            需 索引調色板。由于Height值大于零,圖像倒置的,開始讀入的數據是圖像最后一行的灰
            度值。
            */

              
            return 0;

            }

            posted on 2008-05-08 10:00 OIO 閱讀(5037) 評論(3)  編輯 收藏 引用

            評論

            # re: bmp圖片格式學習(c++代碼) 2009-04-23 17:33 老羊

            真好!大有收獲!  回復  更多評論   

            # re: bmp圖片格式學習(c++代碼) 2009-04-23 17:33 老羊

            真好!大有收獲!
              回復  更多評論   

            # re: bmp圖片格式學習(c++代碼) 2009-07-30 17:25 ablajan

            nt main(int argc, char *argv[])
            {
            fstream fs;
            fs.open(_T("文本.txt"));

            fstream fw;
            fw.open("text.txt");
            char arr[LEN] = {0};
            wchar_t temp[2*LEN+1] = {0};
            int length;
            if(!fs || !fw)
            {
            cout << "Error" << endl;
            return -1;
            }
            while(!fs.eof())
            {
            fs.read(arr, sizeof(arr)-1);
            cout << arr;
            fw.write(arr, sizeof(arr)-1);
            memset(arr, 0, sizeof(arr));

            }
            cout << endl;
            fs.close();
            fw.close();
            return 0;
            }
              回復  更多評論   

            <2009年4月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久国产视频| 国产精品一区二区久久精品涩爱| 日日噜噜夜夜狠狠久久丁香五月| 亚洲AV日韩AV永久无码久久| 久久亚洲国产精品一区二区| 久久人人爽人人澡人人高潮AV | 无码精品久久久久久人妻中字| 久久99中文字幕久久| 久久综合成人网| 久久777国产线看观看精品| 麻豆久久久9性大片| 2020久久精品国产免费| 久久午夜夜伦鲁鲁片免费无码影视| 精品久久久无码人妻中文字幕豆芽| 久久久久综合国产欧美一区二区| 精品久久亚洲中文无码| 色99久久久久高潮综合影院 | 久久精品国产久精国产果冻传媒 | 人妻无码αv中文字幕久久| 久久99亚洲综合精品首页| 久久久久亚洲av无码专区喷水| 思思久久99热只有频精品66| 久久国产精品国产自线拍免费| 久久妇女高潮几次MBA| 色婷婷久久综合中文久久一本| 青青草国产精品久久久久| 国产亚洲欧美精品久久久| 久久亚洲精品成人AV| 久久久久久久久66精品片| 久久精品人妻一区二区三区| 青青草原综合久久大伊人精品| 国产精品久久久久久久久| 国产精品99精品久久免费| 国产成人久久激情91| 99久久国产综合精品麻豆| 久久九九青青国产精品| 国产精品久久国产精品99盘 | 久久婷婷色综合一区二区| 精品人妻伦九区久久AAA片69| 久久精品一本到99热免费| 伊人久久大香线焦AV综合影院|