• <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(偏移量)=(文件大?。┯浀檬莃it位
            */

              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;
            }
              回復  更多評論   

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品国产乱码久久久久久1区2区| 国内精品久久久久伊人av| 韩国三级中文字幕hd久久精品 | 精品久久久久久无码中文字幕| 久久久久久免费一区二区三区| 久久天天躁狠狠躁夜夜av浪潮 | 亚洲一区精品伊人久久伊人| 99精品国产综合久久久久五月天| 久久天天躁狠狠躁夜夜躁2O2O| 2020最新久久久视精品爱| 国产69精品久久久久久人妻精品| 久久99精品国产99久久6男男| 青草久久久国产线免观| 久久99国产乱子伦精品免费| 中文成人无码精品久久久不卡 | 伊人久久亚洲综合影院| 99久久中文字幕| 亚洲午夜久久久久久久久电影网| 国产亚洲成人久久| 91久久精一区二区三区大全| 亚洲欧美日韩中文久久| 久久久久久国产精品无码下载| 国内精品久久久久久久97牛牛| 久久精品国产亚洲AV香蕉| 亚洲&#228;v永久无码精品天堂久久| 丰满少妇高潮惨叫久久久| 亚洲综合熟女久久久30p| 久久婷婷色香五月综合激情| 国产三级精品久久| 国产99久久久国产精免费| 久久久久综合网久久| 国产成人精品久久一区二区三区| 久久婷婷五月综合色高清| 97精品依人久久久大香线蕉97| 久久久久久综合网天天| 怡红院日本一道日本久久 | 无码人妻久久一区二区三区免费 | 久久精品国产亚洲av影院| 色偷偷久久一区二区三区| 欧美大香线蕉线伊人久久| 99久久精品午夜一区二区|