• <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è)程序用來(lái)讀取256*256大小的單色bmp黑白圖片,適當(dāng)修改就可讀取任意大小任意
            //顏色的bmp圖片,在生成文件里,0和1表示黑白,不過(guò)用記事本查看會(huì)有亂碼
            //可以用UE查看16進(jìn)制形式,沒(méi)有問(wè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)制讀方式打開(kāi)該文件,一定要二進(jìn)制的!路徑為存儲(chǔ)圖片路徑*/
              fout.open(
            "out.txt", ios::out|ios::binary);
              
            //out.txt為保存結(jié)果文件,有趣的很,加上bmp數(shù)據(jù),改了后綴就能顯示了,我試過(guò)
              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)容用來(lái)識(shí)別位圖的類(lèi)型,偏移量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;
              
            /*從文件開(kāi)始到位圖數(shù)據(jù)開(kāi)始之間的數(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)的長(zhǎng)度,偏移量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ù),說(shuō)明圖像是倒向的,
              如果該值是一個(gè)負(fù)數(shù),則說(shuō)明圖像是正向的。偏移量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;
              
            /*壓縮說(shuō)明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,不過(guò)我試過(guò)很多次都輸出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é)用下述方法來(lái)
              描述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ù)無(wú)
            需 索引調(diào)色板。由于Height值大于零,圖像倒置的,開(kāi)始讀入的數(shù)據(jù)是圖像最后一行的灰
            度值。
            */

              
            return 0;

            }

            posted on 2008-05-08 10:00 OIO 閱讀(5037) 評(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è)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            97久久国产综合精品女不卡| 久久精品国产亚洲AV无码娇色 | 国产亚州精品女人久久久久久 | 久久九九亚洲精品| 国内高清久久久久久| 伊人 久久 精品| 一本久久a久久精品综合香蕉| 久久精品国产亚洲5555| 成人精品一区二区久久久| 日韩欧美亚洲综合久久影院d3| 久久精品国产亚洲AV高清热| 亚洲国产精品18久久久久久| 久久综合久久美利坚合众国| 国产欧美久久久精品影院| 污污内射久久一区二区欧美日韩| 久久综合九色综合欧美就去吻| 久久亚洲av无码精品浪潮| 久久精品国产精品亚洲| 色播久久人人爽人人爽人人片aV| 久久综合亚洲色HEZYO国产| 亚洲国产精品一区二区三区久久| 久久国产精品无| 国色天香久久久久久久小说| 99久久精品免费看国产一区二区三区| 精品国产99久久久久久麻豆| 亚洲国产精品无码成人片久久 | 7777久久亚洲中文字幕| 久久精品国产半推半就| 久久露脸国产精品| 久久成人国产精品免费软件| 国产精品禁18久久久夂久| 久久伊人精品青青草原高清| 精品久久久久一区二区三区| 亚州日韩精品专区久久久| 无码日韩人妻精品久久蜜桃| 久久综合久久综合久久| 波多野结衣久久一区二区| 国产成人无码久久久精品一| 国产激情久久久久影院老熟女免费| 色天使久久综合网天天 | 一本久久久久久久|