亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        如何在vc++中旋轉(zhuǎn)位圖

        字號(hào):

        第一步,你必須知道位圖即BMP格式的文件的結(jié)構(gòu).
            位圖(bmp)文件由以下幾個(gè)部分組成:
            1.BITMAPFILEHEADER,它的定義如下:
            typedef struct tagBITMAPFILEHEADER
            {
            WORD  bfType;     //必須為’BM’
            DWORD  bfSize;     //文件大小
            WORD  bfReserved1; //必須為0
            WORD  bfReserved2; //必須為0
            DWORD  bfOffBits;  //從ITMAPFILEHEADER到存放bmp數(shù)據(jù)的偏移量                 
            } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
            2.BITMAPINFOHEADER,它的定義如下:
            typedef struct tagBITMAPINFOHEADER
            {
            DWORD biSize; //此結(jié)構(gòu)的大小,可用sizeof(BITMAPINFOHEAER)得到
            LONG  biWidth; //位圖寬度,以象素為單位
            LONG  biHeight; //位圖高度,以象素為單位
            WORD  biPlanes; //必須為1
            WORD  biBitCount;//位圖象素位數(shù),可為0,1,4,8,24,32
            DWORD biCompression;
            DWORD biSizeImage; //(僅用于壓縮)
            LONG  biXPelsPerMeter; //一米橫向象素?cái)?shù)
            LONG  biYPelsPerMeter; //一米縱向象素?cái)?shù)
            DWORD biClrUsed;// (非零用語(yǔ)短顏色表)
            DWORD biClrImportant;
            } BITMAPINFOHEADER, *PBITMAPINFOHEADER;
            由于以上信息可以直接從MSDN上查到,所以只做簡(jiǎn)單介紹,你可以自己查看NSDN幫助,上面有很詳細(xì)的介紹.
            3.DIB位圖像.這里放的是真正的位圖數(shù)據(jù).
            知道了位圖的存放格式,下面我們就可以很容易的把它讀如內(nèi)存.
            第二步,讀入bmp圖像
            LPCTSTR lpszFileName4="untitled.bmp";  //文件路徑
            CFile file;                   //用于讀取BMP文件
            BITMAPFILEHEADER bfhHeader;//bmp文件頭
            BITMAPINFOHEADER bmiHeader; //bmp格式頭
            LPBITMAPINFO lpBitmapInfo;  //bmp格式具體信息
            int bmpWidth=0;             //圖片寬度
            int bmpHeight = 0;           //圖片高度      
            if(!file.Open(lpszFileName,CFile::modeRead))
            return ;               //打開文件
            file.Read(&bfhHeader,sizeof(BITMAPFILEHEADER));//讀取文件頭
            if(bfhHeader.bfType!=((WORD) (’M’<<8)|’B’))      //判斷是否是"BM"
            return ;
            if(bfhHeader.bfSize!=file.GetLength())
            return ;
            if (file.Read((LPSTR)&bmiHeader, sizeof(bmiHeader)) != sizeof(bmiHeader))
            return ;
            bmpHeight = bmiHeader.biHeight;//得到高度和寬度
            bmpWidth = bmiHeader.biWidth;
            file.SeekToBegin();
            file.Read(&bfhHeader,sizeof(BITMAPFILEHEADER));
            UINT uBmpInfoLen=(UINT) bfhHeader.bfOffBits-sizeof(BITMAPFILEHEADER);
            lpBitmapInfo=(LPBITMAPINFO) new BYTE[uBmpInfoLen];
            file.Read((LPVOID) lpBitmapInfo,uBmpInfoLen);
            if((* (LPDWORD)(lpBitmapInfo))!=sizeof(BITMAPINFOHEADER))
            return ;
            DWORD dwBitlen=bfhHeader.bfSize - bfhHeader.bfOffBits;
            LPVOID lpSrcBits=new BYTE[dwBitlen];     //將數(shù)據(jù)讀入lpSrcBits數(shù)組
            file.ReadHuge(lpSrcBits,dwBitlen);
            file.Close();                           //關(guān)閉文件