• <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圖片格式學(xué)習(xí)(c++代碼)

             

            //這個(gè)程序用來讀取256*256大小的單色bmp黑白圖片,適當(dāng)修改就可讀取任意大小任意
            //顏色的bmp圖片,在生成文件里,0和1表示黑白,不過用記事本查看會(huì)有亂碼
            //可以用UE查看16進(jìn)制形式,沒有問題的
            #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);   
              
            /*以二進(jìn)制讀方式打開該文件,一定要二進(jìn)制的!路徑為存儲(chǔ)圖片路徑*/
              fout.open(
            "out.txt", ios::out|ios::binary);
              
            //out.txt為保存結(jié)果文件,有趣的很,加上bmp數(shù)據(jù),改了后綴就能顯示了,我試過
              if(!fin)
              
            {
                cout
            <<"No this file!\n";
                
            return 1;
              }

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

              fin.read((
            char*)&InfoHeaderSize,sizeof(uvar32));
              cout
            <<"Bitmap Info Header Size: "<<InfoHeaderSize<<endl; 
              
            /*位圖信息頭(Bitmap Info Header)的長度,偏移量14,
               結(jié)果 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;
              
            /*位圖的高度,以象素為單位,如果該值是一個(gè)正數(shù),說明圖像是倒向的,
              如果該值是一個(gè)負(fù)數(shù),則說明圖像是正向的。偏移量22,Bitmap Height: 256
            */

              fin.read((
            char*)&Planes,sizeof(uvar16));
              cout
            <<"Bitmap Planes: "<<Planes<<endl;
              
            /*位圖的位面數(shù)(注:該值將總是1),偏移量26,Bitmap Planes: 1*/
              fin.read((
            char*)&Bit,sizeof(uvar16));
              cout
            <<"Bits per Pixel: "<<Bit<<endl;
              
            /*每個(gè)象素的位數(shù),偏移量28,單色應(yīng)該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;
              
            /*用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小,偏移量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;
              /*位圖使用的顏色數(shù),應(yīng)該為2,不過我試過很多次都輸出0,不影響的*/
              fin.read((
            char*)&ImportantColors,sizeof(uvar32));
              cout
            <<"ImportantColors: "<<ImportantColors<<endl;
              
            /*指定重要的顏色數(shù)。當(dāng)該域的值等于顏色數(shù)時(shí)(或者等于0時(shí)),
              表示所有顏色都一樣重要。偏移量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;
              
              }

              
            /*調(diào)色板規(guī)范。對(duì)于調(diào)色板中的每個(gè)表項(xiàng),這4個(gè)字節(jié)用下述方法來
              描述RGB的值:1字節(jié)用于藍(lán)色分量 ,1字節(jié)用于綠色分量 ,1字節(jié)用于紅色分量 
              1字節(jié)用于填充符(設(shè)置為0),對(duì)于彩色圖像R,G,B
              有各自的分量,對(duì)與黑白圖像,R=G=B=灰度級(jí)。輸出結(jié)果有 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個(gè)像素的灰度讀入數(shù)組imdata中,由于前面調(diào)色板的格式,讀出的數(shù)據(jù)無
            需 索引調(diào)色板。由于Height值大于零,圖像倒置的,開始讀入的數(shù)據(jù)是圖像最后一行的灰
            度值。
            */

              
            return 0;

            }

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

            評(píng)論

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

            真好!大有收獲!  回復(fù)  更多評(píng)論   

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

            真好!大有收獲!
              回復(fù)  更多評(píng)論   

            # re: bmp圖片格式學(xué)習(xí)(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;
            }
              回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


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

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品中文字幕无码绿巨人| 亚洲伊人久久精品影院| 久久国产成人亚洲精品影院| 91久久精品视频| 97精品伊人久久大香线蕉| 久久国产精品无码HDAV| 国产 亚洲 欧美 另类 久久| 久久久这里有精品中文字幕| 久久久久se色偷偷亚洲精品av| 国产精品久久午夜夜伦鲁鲁| 青青久久精品国产免费看| 久久久久人妻一区精品色| 久久亚洲天堂| 久久国产精品-国产精品| 亚洲精品WWW久久久久久| 青青青伊人色综合久久| 99久久精品免费看国产一区二区三区 | 久久久久亚洲AV成人网| 久久水蜜桃亚洲av无码精品麻豆| 国产精品一区二区久久精品无码 | 国产精品9999久久久久| 香蕉99久久国产综合精品宅男自 | 久久99热这里只有精品国产| 色欲av伊人久久大香线蕉影院 | 久久高清一级毛片| 久久精品国产第一区二区三区| 欧美久久久久久| 深夜久久AAAAA级毛片免费看| 国产精品成人久久久久三级午夜电影 | 亚洲精品成人久久久| 麻豆久久| 性欧美大战久久久久久久| 久久精品国产福利国产琪琪| 狠狠色丁香婷婷综合久久来| 久久国产免费观看精品3| 精品免费久久久久久久| 国产精品久久一区二区三区| 韩国免费A级毛片久久| 国产亚洲综合久久系列| 久久精品www| 久久久久国色AV免费观看|