• <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
            數(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ù)塊的長度                 28 01 00 00(10進(jìn)制=296) 
            018(012)4    圖象數(shù)據(jù)塊相對于文件頭部的偏移量 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)長度        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ù)的長度          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 糯米 閱讀(600) 評論(0)  編輯 收藏 引用 所屬分類: Misc

            欧美黑人又粗又大久久久| 久久天天日天天操综合伊人av| 精品免费久久久久国产一区| 国产精品一区二区久久不卡 | 免费观看久久精彩视频| 久久久久久久波多野结衣高潮| 久久亚洲电影| 国产精品乱码久久久久久软件| 久久精品卫校国产小美女| 久久精品亚洲AV久久久无码| 久久99久国产麻精品66| 无码专区久久综合久中文字幕| 久久午夜无码鲁丝片| 国产Av激情久久无码天堂| 99久久久国产精品免费无卡顿| 久久99毛片免费观看不卡| 99久久精品免费国产大片| 久久亚洲2019中文字幕| 伊人久久综合无码成人网 | 国产Av激情久久无码天堂 | 国产精品VIDEOSSEX久久发布| 精品无码久久久久久久动漫| 久久久无码精品亚洲日韩软件| 一本久久精品一区二区| 久久精品国产亚洲AV电影| 91久久精品国产91性色也| 国产精品99久久久久久宅男小说| 久久久女人与动物群交毛片| 国产高潮国产高潮久久久91 | 亚洲国产精品无码成人片久久| A狠狠久久蜜臀婷色中文网| 精品国产青草久久久久福利| 亚洲中文字幕无码久久2020| 7国产欧美日韩综合天堂中文久久久久| 亚洲精品高清一二区久久| 精品国际久久久久999波多野| 免费一级做a爰片久久毛片潮| 久久久久99精品成人片试看| 性欧美大战久久久久久久| 欧美777精品久久久久网| 久久精品国产色蜜蜜麻豆|