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

            Beginning to 編程

            VC++ 方面編程文章

             

            一些基本的GDI操作BITMAP的方法 /zhuan

            1 
             2 #ifndef _BITMAP_H
             3 #define _BITMAP_H

             4 
             5 #include <windows.h>
             6 
             7 void SaveImage(const char * bmp_file,void *rgb_data,int rgb_len,BITMAPINFOHEADER * bi);
             8 void FillBitmapInfoHdr(BITMAPINFOHEADER * bi,int width,int height,int
             deep);
             9 bool GetImageData( HWND target,RECT rect,void ** data,int *
             len);
            10 bool GetImageData2( HWND target,RECT rect,void * data,int *
             len);
            11 void CaptureImage(HWND target,const char *
             destfile);
            12 void DrawBitmap(HWND hwnd,int width,int height,char *data,int
             deep);            
            13 void DrawBitmap2(HWND hwnd,RECT rect,char *data,int
             deep);
            14 void StretchDrawBitmap(HWND hwnd,int width,int height,char *data,int
             deep);
            15 #endif

            16 
              1 #include <windows.h>
              2 #include <stdio.h>
              3 
              4 void SaveImage(const char * bmp_file,void *rgb_data,int rgb_len,BITMAPINFOHEADER * bi){
              5 
                BITMAPFILEHEADER hdr;
              6     FILE *
            fsave;
              7     memset(&hdr,0,sizeof
            (hdr));
              8     hdr.bfType = ((WORD) ('M' << 8| 'B'
            );
              9     hdr.bfSize = sizeof(hdr)+sizeof(BITMAPINFOHEADER)+
            rgb_len;
             10     hdr.bfOffBits = (DWORD) (sizeof(hdr) + sizeof
            (BITMAPINFOHEADER) );
             11     //--

             12     fsave = fopen(bmp_file,"wb");
             13     fwrite( &hdr,sizeof(hdr),1
            ,fsave);
             14     fwrite(bi,sizeof(BITMAPINFOHEADER),1
            ,fsave);
             15     fwrite(rgb_data,rgb_len,1
            ,fsave);
             16 
                fflush(fsave);
             17 
                fclose(fsave);
             18 
            }
             19 

             20 
             21 void FillBitmapInfoHdr(BITMAPINFOHEADER * bi,int width,int height,int deep){
             22     memset(bi,0,sizeof
            (BITMAPINFOHEADER));
             23     bi->biSize        = sizeof
            (BITMAPINFOHEADER);
             24     bi->biWidth        =
             width;
             25     bi->biHeight         =
             height;
             26     bi->biPlanes         = 1
            ;
             27     bi->biBitCount        = deep;            //bm.bmPlanes * bm.bmBitsPixel;

             28     bi->biCompression    = BI_RGB;
             29     bi->biSizeImage        = 0
            ;
             30     bi->biXPelsPerMeter    = 0
            ;
             31     bi->biYPelsPerMeter    = 0
            ;
             32     bi->biClrUsed        = 0
            ;
             33     bi->biClrImportant    = 0
            ;
             34 
            }
             35 

             36 bool GetImageData2( HWND target,RECT rect,void * data,int * len){
             37 
                 HDC entireDC;
             38 
                RECT rc;
             39 
                HBITMAP bitmap;
             40 
                HDC CompDC;    
             41     entireDC =
             GetDC(target);
             42     //GetWindowRect(target,&rc);

             43     rc = rect;   
             44 
                
             45     if( rc.right-rc.left<=0 || rc.bottom-rc.top <=0
            ){
             46         return false
            ;
             47 
                }
             48     bitmap = CreateCompatibleBitmap( entireDC,rc.right-rc.left,rc.bottom-
            rc.top);
             49     if(bitmap ==
            NULL){
             50 
                    ReleaseDC(target,entireDC);
             51         return false
            ;
             52 
                }
             53     CompDC =
             CreateCompatibleDC(entireDC);
             54 
                SelectObject(CompDC,bitmap);    
             55     BitBlt(CompDC,0,0,rc.right-rc.left,rc.bottom-
            rc.top,entireDC,rect.left,rect.top,SRCCOPY);
             56 

             57     BITMAPINFO bmi;
             58       BITMAPINFOHEADER   *
            bi;
             59       int
             rgb_len ;
             60     int
             lines;
             61     bi = &
            bmi.bmiHeader;
             62       char *
            rgb_buff ;
             63     FillBitmapInfoHdr(bi,rc.right-rc.left,rc.bottom-rc.top,24
            );
             64 

             65     rgb_len = bi->biWidth * bi->biHeight * 3;
             66 
                
             67     rgb_buff =(char*) data;// new char[rgb_len];

             68     if( rgb_buff == NULL ){
             69         return false
            ;
             70 
                }
             71     lines = GetDIBits( CompDC,bitmap,0,rc.bottom-
            rc.top,rgb_buff,
             72 
                                    (LPBITMAPINFO)bi,DIB_RGB_COLORS);
             73 
                DeleteObject(bitmap);
             74 
                ReleaseDC(target,CompDC);
             75 
                ReleaseDC(target,entireDC);
             76 
                DeleteDC(CompDC);
             77     if( lines ==
             NULL){
             78       //  delete[] rgb_buff;

             79         return false;
             80 
                }
             81    // *data = rgb_buff;

             82     *len = rgb_len;
             83     return true
            ;
             84 
            }
             85 

             86 
             87 bool GetImageData( HWND target,RECT rect,void ** data,int * len){
             88 
                 HDC entireDC;
             89 
                RECT rc;
             90 
                HBITMAP bitmap;
             91 
                HDC CompDC;    
             92     entireDC =
             GetDC(target);
             93     //GetWindowRect(target,&rc);

             94     rc = rect;    
             95     bitmap = CreateCompatibleBitmap( entireDC,rc.right-rc.left,rc.bottom-
            rc.top);
             96     CompDC =
             CreateCompatibleDC(entireDC);
             97 
                SelectObject(CompDC,bitmap);    
             98     BitBlt(CompDC,0,0,rc.right-rc.left,rc.bottom-rc.top,entireDC,0,0
            ,SRCCOPY);
             99 

            100     BITMAPINFO bmi;
            101       BITMAPINFOHEADER   *
            bi;
            102       int
             rgb_len ;
            103     int
             lines;
            104     bi = &
            bmi.bmiHeader;
            105       char *
            rgb_buff ;
            106     FillBitmapInfoHdr(bi,rc.right-rc.left,rc.bottom-rc.top,24
            );
            107 

            108     rgb_len = bi->biWidth * bi->biHeight * 3;
            109     rgb_buff = new char
            [rgb_len];
            110     if( rgb_buff ==
             NULL ){
            111         return false
            ;
            112 
                }
            113     lines = GetDIBits( CompDC,bitmap,0,rc.bottom-
            rc.top,rgb_buff,
            114 
                                    (LPBITMAPINFO)bi,DIB_RGB_COLORS);
            115 
                DeleteObject(bitmap);
            116 
                ReleaseDC(target,CompDC);
            117 
                ReleaseDC(target,entireDC);
            118 
                DeleteDC(CompDC);
            119     if( lines ==
             NULL){
            120 
                    delete[] rgb_buff;
            121         return false
            ;
            122 
                }
            123     *data =
             rgb_buff;
            124     *len =
             rgb_len;
            125     return true
            ;
            126 
            }
            127 

            128 
            129 void DrawBitmap(HWND hwnd,int width,int height,char *data,int deep);
            130 void CaptureImage(HWND target,const char *
             destfile){
            131 
                RECT rc;
            132     GetWindowRect(target,&
            rc);
            133     void *
            data;
            134     int
             len;
            135     GetImageData(target,rc,&data,&
            len);
            136 

            137     BITMAPINFO bmi;
            138       BITMAPINFOHEADER   *
            bi;      
            139     bi = &
            bmi.bmiHeader;
            140     FillBitmapInfoHdr(bi,rc.right-rc.left,rc.bottom-rc.top,24
            );
            141 

            142     SaveImage(destfile,data,len,bi);
            143 
                
            144 
                delete[] data;
            145 
            }
            146 

            147 void DrawBitmap2(HWND hwnd,RECT rect,char *data,int deep){
            148 

            149     BITMAPINFOHEADER   *bi;
            150 
                BITMAPINFO bitmap;
            151     bi = &
            bitmap.bmiHeader;
            152     memset(&bitmap,0,sizeof
            (bitmap));
            153     bi->biSize        = sizeof
            (BITMAPINFOHEADER);
            154     bi->biWidth        = rect.right -
             rect.left;
            155     bi->biHeight         = rect.bottom -
             rect.top;
            156     bi->biPlanes         = 1
            ;
            157     bi->biBitCount        = deep;            //bm.bmPlanes * bm.bmBitsPixel;

            158     bi->biCompression    = BI_RGB;
            159     bi->biSizeImage        = bi->biWidth*bi->biHeight*deep/3
            ;
            160     bi->biXPelsPerMeter    = 0
            ;
            161     bi->biYPelsPerMeter    = 0
            ;
            162     bi->biClrUsed        = 0
            ;
            163     bi->biClrImportant    = 0
            ;
            164 

            165     HDC hdc =   GetDC(hwnd);
            166 

            167     StretchDIBits( hdc,
            168 
                    rect.left,
            169 
                    rect.top,
            170         rect.right-
            rect.left,
            171         rect.bottom -
             rect.top,
            172         //
            rc.right-1,
            173         //rc.bottom-1,

            174         0,
            175         0
            ,
            176         rect.right-
            rect.left,
            177         rect.bottom -
             rect.top,
            178         (CONST VOID *
            )data,
            179         &
            bitmap,
            180 
                    DIB_RGB_COLORS,
            181 
                    SRCCOPY );
            182 

            183     //ReleaseDC(hwnd,hdc);
            184     ReleaseDC(hwnd,hdc);
            185 
            }
            186 

            187 void StretchDrawBitmap(HWND hwnd,int width,int height,char *data,int deep){
            188 
                
            189     BITMAPINFOHEADER   *
            bi;
            190 
                BITMAPINFO bitmap;
            191     bi = &
            bitmap.bmiHeader;
            192     memset(&bitmap,0,sizeof
            (bitmap));
            193     bi->biSize        = sizeof
            (BITMAPINFOHEADER);
            194     bi->biWidth        =
             width;
            195     bi->biHeight         =
             height;
            196     bi->biPlanes         = 1
            ;
            197     bi->biBitCount        = deep;            //bm.bmPlanes * bm.bmBitsPixel;

            198     bi->biCompression    = BI_RGB;
            199     bi->biSizeImage        = bi->biWidth*bi->biHeight*deep/3
            ;
            200     bi->biXPelsPerMeter    = 0
            ;
            201     bi->biYPelsPerMeter    = 0
            ;
            202     bi->biClrUsed        = 0
            ;
            203     bi->biClrImportant    = 0
            ;
            204 
                RECT rc;
            205     HDC hdc =
               GetDC(hwnd);
            206     ::GetWindowRect(hwnd,&
            rc);
            207 
                StretchDIBits( hdc,
            208         0
            ,
            209         0
            ,
            210         rc.right -
             rc.left,
            211         rc.bottom -
             rc.top,
            212         0
            ,
            213         0
            ,
            214 
                    width,
            215 
                    height,
            216         (CONST VOID *
            )data,
            217         &
            bitmap,
            218 
                    DIB_RGB_COLORS,
            219 
                    SRCCOPY );
            220 
                
            221     //ReleaseDC(hwnd,hdc);

            222     ReleaseDC(hwnd,hdc);
            223 
            }
            224 

            225 void DrawBitmap(HWND hwnd,int width,int height,char *data,int deep){
            226 

            227     BITMAPINFOHEADER   *bi;
            228 
                BITMAPINFO bitmap;
            229     bi = &
            bitmap.bmiHeader;
            230     memset(&bitmap,0,sizeof
            (bitmap));
            231     bi->biSize        = sizeof
            (BITMAPINFOHEADER);
            232     bi->biWidth        =
             width;
            233     bi->biHeight         =
             height;
            234     bi->biPlanes         = 1
            ;
            235     bi->biBitCount        = deep;            //bm.bmPlanes * bm.bmBitsPixel;

            236     bi->biCompression    = BI_RGB;
            237     bi->biSizeImage        = width*height*
            deep;
            238     bi->biXPelsPerMeter    = 0
            ;
            239     bi->biYPelsPerMeter    = 0
            ;
            240     bi->biClrUsed        = 0
            ;
            241     bi->biClrImportant    = 0
            ;
            242 

            243     HDC hdc =   GetDC(hwnd);
            244 

            245     StretchDIBits( hdc,
            246         0
            ,
            247         0
            ,
            248         width-1
            ,
            249         height-1
            ,
            250         //
            rc.right-1,
            251         //rc.bottom-1,

            252         0,
            253         0
            ,
            254 
                    width,
            255 
                    height,
            256         (CONST VOID *
            )data,
            257         &
            bitmap,
            258 
                    DIB_RGB_COLORS,
            259 
                    SRCCOPY );
            260 

            261     //ReleaseDC(hwnd,hdc);
            262     ReleaseDC(hwnd,hdc);
            263 }

            posted on 2006-03-10 11:27 Beginning to 編程 閱讀(1429) 評論(0)  編輯 收藏 引用 所屬分類: 關鍵代碼

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            BlogDev

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品蜜臀久久久久99网站| 精品久久久久久国产牛牛app| 青青草国产精品久久久久| 成人午夜精品无码区久久| 日本高清无卡码一区二区久久 | 国产精品99久久免费观看| 久久精品国产亚洲av麻豆蜜芽| 久久久久九九精品影院| 91精品国产色综久久| 91精品国产高清久久久久久国产嫩草 | 久久SE精品一区二区| 尹人香蕉久久99天天拍| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久久久一级精品亚洲国产成人综合AV区 | 狠狠色婷婷久久一区二区三区| 亚洲av日韩精品久久久久久a| 久久夜色精品国产噜噜亚洲a| 99久久精品无码一区二区毛片| 国产精品无码久久综合| 91精品国产综合久久精品| 国产韩国精品一区二区三区久久 | 精品久久一区二区三区| 久久人人爽人爽人人爽av| 日本久久中文字幕| 久久精品国产亚洲αv忘忧草 | 国产成人综合久久久久久| 久久一区二区免费播放| 国色天香久久久久久久小说| 日韩乱码人妻无码中文字幕久久| AV无码久久久久不卡网站下载 | 午夜精品久久久久久毛片| 久久er国产精品免费观看2| 久久久WWW免费人成精品| 伊人久久大香线蕉av一区| 久久精品草草草| 2021国产精品久久精品| 久久被窝电影亚洲爽爽爽| 久久青青草原亚洲av无码| 久久狠狠高潮亚洲精品| 久久涩综合| 亚洲一区中文字幕久久|