• <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, 評(píng)論 - 47, 引用 - 0
            數(shù)據(jù)加載中……

            根據(jù)擴(kuò)展名獲得ico文件

             

            #define ICON_SIZE 32

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

                
            // 設(shè)備描述表   
                HDC hDC; 
                
            //位圖中每個(gè)像素所占字節(jié)數(shù)   
                WORD wBitCount; 
                
            // 定義調(diào)色板大小,位圖中像素字節(jié)大小,位圖文件大小,寫入文件字節(jié)數(shù)
                DWORD dwBmBitsSize;
                
            //位圖屬性結(jié)構(gòu)   
                BITMAP Bitmap; 
                
            //位圖信息頭結(jié)構(gòu)     
                BITMAPINFOHEADER bi; 
                
            // 定義文件,分配內(nèi)存句柄,調(diào)色板句柄   
                
            // 計(jì)算位圖文件每個(gè)像素所占字節(jié)數(shù)   
                HANDLE hPal, hOldPal = NULL;

                
            // 設(shè)置位圖信息頭結(jié)構(gòu)   
                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;   

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

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

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

                
            // 恢復(fù)調(diào)色板       
                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字節(jié)
                
            // 圖像信息塊16字節(jié)
                
            // BMP信息頭40字節(jié)
                
            // 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字節(jié)) 
            000(000)2    保留的字節(jié)            00 00 
            002(002)2    資源類型             01 00 (01為圖標(biāo),02為光標(biāo)) 
            004(004)2    圖象個(gè)數(shù)             01 00 
                
            */

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

                
            /*
             (二、圖像信息塊16字節(jié))  
            006(006)1    圖標(biāo)寬度             20 
            007(007)1    圖標(biāo)高度             20 
            008(008)1    顏色計(jì)數(shù)             00(02=單色, 00≥256色) 
            009(009)1    未用                00 
            010(00A)4    保留的              00 00 00 00 
            014(00E)4    圖象數(shù)據(jù)塊的長(zhǎng)度                 28 01 00 00(10進(jìn)制=296) 
            018(012)4    圖象數(shù)據(jù)塊相對(duì)于文件頭部的偏移量 16 00 00 00(10進(jìn)制=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字節(jié)) 
            022(016)4    BMP 信息頭結(jié)構(gòu)長(zhǎng)度        28 00 00 00(10進(jìn)制=40)  
            026(01A)4    圖像寬度              10 00 00 00 
            030(01E)4    圖像高度(XOR圖高度+AND圖高度) 20 00 00 00 
            034(022)2    位面板數(shù)                         01 00 
            036(024)2    每象素所占位數(shù)                   04 00 
            038(026)4    象素?cái)?shù)據(jù)的壓縮類型        00 00 00 00(表示未壓縮) 
            042(02A)4    圖象數(shù)據(jù)的長(zhǎng)度          C0 00 00 00(10進(jìn)制=192) 
            046(02E)16   未用               16個(gè)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位圖的數(shù)據(jù))  
                
            */

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

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

                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 糯米 閱讀(599) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Misc

            亚洲中文字幕伊人久久无码 | 久久se这里只有精品| 久久精品一区二区三区AV| 久久免费99精品国产自在现线| 久久国产免费观看精品3| 亚洲精品乱码久久久久66| 久久久久久精品久久久久| 色综合久久久久综合99| 久久伊人中文无码| 久久这里的只有是精品23| 伊人久久大香线蕉综合影院首页| 欧美精品九九99久久在观看| 亚洲综合久久夜AV | 久久人人爽人人爽人人片AV麻烦| 伊人久久大香线蕉AV一区二区 | 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲国产精品久久久久婷婷软件| 国产精品一久久香蕉产线看| 国产亚洲婷婷香蕉久久精品| 国产精品热久久毛片| 久久AAAA片一区二区| 久久国内免费视频| 亚洲AV无码久久| 久久久久国产一级毛片高清版| 久久99精品久久久久久久久久| 国产精品久久久久久| 久久青青草原精品国产不卡| 思思久久99热只有频精品66| 久久久无码人妻精品无码| 亚洲一区中文字幕久久| 青青草国产97免久久费观看| 精品国产青草久久久久福利| 久久电影网一区| 欧美日韩精品久久久免费观看| 亚洲熟妇无码另类久久久| 狠色狠色狠狠色综合久久| 综合久久给合久久狠狠狠97色 | 日韩人妻无码精品久久免费一 | 久久久久免费视频| 人人狠狠综合久久88成人| 国产精品久久久久乳精品爆|