• <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>

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
            數據加載中……

            根據擴展名獲得ico文件

             

            #define ICON_SIZE 32

            static int _HBitmapToBmp32Bits(HBITMAP hBitmap, U8 *outint out_len)
            {   
                
            /*
                 * 注意:
                 * 該函數代碼部分參考csdn。向原作者致敬!
                 
            */

                
            // 設備描述表   
                HDC hDC; 
                
            //位圖中每個像素所占字節數   
                WORD wBitCount; 
                
            // 定義調色板大小,位圖中像素字節大小,位圖文件大小,寫入文件字節數
                DWORD dwBmBitsSize;
                
            //位圖屬性結構   
                BITMAP Bitmap; 
                
            //位圖信息頭結構     
                BITMAPINFOHEADER bi; 
                
            // 定義文件,分配內存句柄,調色板句柄   
                
            // 計算位圖文件每個像素所占字節數   
                HANDLE hPal, hOldPal = NULL;

                
            // 設置位圖信息頭結構   
                wBitCount = 32;
                GetObject(hBitmap, 
            sizeof(BITMAP), (LPSTR)&Bitmap); 
                
            if (Bitmap.bmWidth != ICON_SIZE || Bitmap.bmHeight != ICON_SIZE) {
                    Dbg(
            "size not fit\n");
                    
            return 0;
                }


                memset(
            &bi, 0sizeof(bi));
                bi.biSize 
            = sizeof(BITMAPINFOHEADER);   
                bi.biWidth 
            = Bitmap.bmWidth;   
                bi.biHeight 
            = Bitmap.bmHeight;   
                bi.biPlanes 
            = 1;   
                bi.biBitCount 
            = wBitCount;   
                bi.biCompression 
            = BI_RGB;   

                
            // 計算位圖大小   
                dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32* 4 * Bitmap.bmHeight;
                
            if (out_len < (int)dwBmBitsSize)
                    
            return 0;

                
            // 處理調色板
                hPal = (HPALETTE)GetStockObject(DEFAULT_PALETTE); 
                
            if (hPal) {   
                    hDC 
            = GetDC(NULL);   
                    hOldPal 
            = SelectPalette(hDC, (HPALETTE)hPal, FALSE);   
                    RealizePalette(hDC);   
                }
               

                
            // 獲取該調色板下新的像素值   
                GetDIBits(hDC, 
                          hBitmap, 
                          
            0
                          (UINT)Bitmap.bmHeight,   
                          (LPSTR)
            out,   
                          (BITMAPINFO 
            *)&bi,  
                          DIB_PAL_COLORS
                          );

                
            // 恢復調色板       
                if (hOldPal) {   
                    SelectPalette(hDC,(HPALETTE)hOldPal, TRUE);   
                    RealizePalette(hDC);   
                    ReleaseDC(NULL, hDC);   
                }


                
            return dwBmBitsSize;   
            }
               


            static int ExtToIcoFile(char *ext, U8 *outint out_len)
            {
                SHFILEINFOA sfi;   
                
            char str[32= "*." };
                U32 
            *buf;
                ICONINFO ii;
                U8 
            *orig = out;
                
            int i;

            #define XOR_SIZE ICON_SIZE*ICON_SIZE*4
            #define AND_SIZE ICON_SIZE*ICON_SIZE/8

                
            // Calc File Length
                
            // 文件頭6字節
                
            // 圖像信息塊16字節
                
            // BMP信息頭40字節
                
            // XOR位圖
                
            // 單色AND位圖
                if (out_len < 6 + 16 + 40 + XOR_SIZE + AND_SIZE)
                    
            return 0;

                strncat(str, ext, 
            sizeof(str) - 8);
                SHGetFileInfoA(str,  
                               FILE_ATTRIBUTE_NORMAL,     
                               
            &sfi,
                               
            sizeof(SHFILEINFO),  
                               SHGFI_USEFILEATTRIBUTES 
            | SHGFI_ICON
                               );
                GetIconInfo(sfi.hIcon, 
            &ii);

                
            /*
                 (一、文件頭6字節) 
            000(000)2    保留的字節            00 00 
            002(002)2    資源類型             01 00 (01為圖標,02為光標) 
            004(004)2    圖象個數             01 00 
                
            */

                
            *(U16 *)out = 0out += 2;
                
            *(U16 *)out = 1out += 2;
                
            *(U16 *)out = 1out += 2;

                
            /*
             (二、圖像信息塊16字節)  
            006(006)1    圖標寬度             20 
            007(007)1    圖標高度             20 
            008(008)1    顏色計數             00(02=單色, 00≥256色) 
            009(009)1    未用                00 
            010(00A)4    保留的              00 00 00 00 
            014(00E)4    圖象數據塊的長度                 28 01 00 00(10進制=296) 
            018(012)4    圖象數據塊相對于文件頭部的偏移量 16 00 00 00(10進制=22) 
                
            */

                
            *out++ = ICON_SIZE;
                
            *out++ = ICON_SIZE;
                
            *out++ = 0;
                
            *out++ = 0;
                
            *(U32 *)out = 0out += 4;
                
            *(U32 *)out = 40 + XOR_SIZE + AND_SIZE; out += 4;
                
            *(U32 *)out = 22out += 4;

                
            /*
             (三、BMP信息頭40字節) 
            022(016)4    BMP 信息頭結構長度        28 00 00 00(10進制=40)  
            026(01A)4    圖像寬度              10 00 00 00 
            030(01E)4    圖像高度(XOR圖高度+AND圖高度) 20 00 00 00 
            034(022)2    位面板數                         01 00 
            036(024)2    每象素所占位數                   04 00 
            038(026)4    象素數據的壓縮類型        00 00 00 00(表示未壓縮) 
            042(02A)4    圖象數據的長度          C0 00 00 00(10進制=192) 
            046(02E)16   未用               16個00 
                
            */

                
            *(U32 *)out = 40out += 4;
                
            *(U32 *)out = 32out += 4;
                
            *(U32 *)out = 64out += 4;
                
            *(U16 *)out = 1out += 2;    // ?? 
                *(U16 *)out = 32out += 2;
                
            *(U32 *)out = 0out += 4;
                
            *(U32 *)out = XOR_SIZE + AND_SIZE; out += 4;
                memset(
            out016); out += 16;

                
            /*
                (五、XOR位圖的數據)  
                
            */

                
            if (_HBitmapToBmp32Bits(ii.hbmColor, out, XOR_SIZE) != XOR_SIZE) 
                    
            return 0;
                
            out += 32*32*4;

                
            /*
                (六、單色AND位圖的數據) 
                
            */

                buf 
            = (U32 *)malloc(XOR_SIZE);
                
            if (!buf)
                    
            return 0;
                
            if (_HBitmapToBmp32Bits(ii.hbmMask, (U8 *)buf, XOR_SIZE) != XOR_SIZE)
                    
            return 0;
                memset(
            out0, AND_SIZE);
                
            //out += 32*32/8;
                for (i = 0; i < AND_SIZE*8; i++{
                    
            if (buf[i])
                        
            *out |= (1 << (7 - (i&7)));
                    
            if ((i&7== 7)
                        
            out++;
                }

                free(buf);

            #undef AND_SIZE
            #undef XOR_SIZE

                
            return out - orig;
            }


            #undef ICON_SIZE


            int main()
            {
                
            void *s, *a;
                
            int len;
                
            static char line[1024], method[16], url[128];
                FILE 
            *fp;
                
            static U8 buf[1024*1024*1];
                
                fp 
            = fopen("b.ico""wb+");
                len 
            = ExtToIcoFile("mp3", buf, sizeof(buf));
                len 
            = fwrite(buf, len, 1, fp);
                fclose(fp);
                
            return 0;

            posted on 2010-02-22 20:54 糯米 閱讀(604) 評論(0)  編輯 收藏 引用 所屬分類: Misc

            人妻少妇久久中文字幕 | avtt天堂网久久精品| 亚洲午夜无码久久久久| 国产精品对白刺激久久久| 久久福利青草精品资源站免费| 久久青青草原精品国产不卡| 人妻精品久久久久中文字幕一冢本| 久久国产亚洲精品麻豆| 欧美伊人久久大香线蕉综合69| 精品久久久久久亚洲| 国产日韩欧美久久| 久久精品国产AV一区二区三区| 欧美精品一区二区精品久久| 久久久久国产一级毛片高清板| 亚洲国产另类久久久精品黑人| 狠狠色综合久久久久尤物| 久久99久久99精品免视看动漫| 国内精品久久久久久久久| 久久亚洲AV成人无码电影| 久久久久久久国产免费看| 国产高潮国产高潮久久久| 亚洲国产日韩综合久久精品| 91精品国产综合久久四虎久久无码一级| 久久人人爽人人爽人人av东京热| 国产2021久久精品| 国产精品久久一区二区三区| 日日躁夜夜躁狠狠久久AV| 欧美伊人久久大香线蕉综合 | 青青国产成人久久91网| 中文字幕热久久久久久久| 伊人久久大香线蕉AV一区二区| 久久久91精品国产一区二区三区| 久久久久成人精品无码中文字幕| 久久久久久精品免费免费自慰| 欧美久久亚洲精品| 亚洲一本综合久久| 最新久久免费视频| 人妻系列无码专区久久五月天| 91精品国产高清久久久久久91 | 一本久久综合亚洲鲁鲁五月天| 99久久精品九九亚洲精品|