• <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 編程 閱讀(1430) 評論(0)  編輯 收藏 引用 所屬分類: 關鍵代碼

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            BlogDev

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久www免费人成看片| 91精品国产高清久久久久久io| 久久最近最新中文字幕大全| 久久精品国产亚洲一区二区| 欧美精品一区二区久久| 久久黄色视频| 精品久久一区二区| 久久久久亚洲AV无码观看| 久久丫精品国产亚洲av不卡| 国内精品免费久久影院| 久久婷婷人人澡人人爽人人爱 | 99国产精品久久| 一级a性色生活片久久无少妇一级婬片免费放| 久久综合久久美利坚合众国| 日本三级久久网| 欧美噜噜久久久XXX| 国产精品久久久久久久久软件| 99麻豆久久久国产精品免费| 久久精品国产亚洲AV蜜臀色欲 | 久久精品国产精品亚洲| 五月丁香综合激情六月久久| 欧美麻豆久久久久久中文| 久久免费国产精品一区二区| 久久男人Av资源网站无码软件| 久久婷婷是五月综合色狠狠| 久久精品成人一区二区三区| 99久久99久久精品国产| 久久丫精品国产亚洲av不卡 | 久久久这里只有精品加勒比| 国产婷婷成人久久Av免费高清| 中文无码久久精品| 亚洲一区精品伊人久久伊人| 欧洲国产伦久久久久久久| 国产高潮国产高潮久久久91| 国产精品九九久久精品女同亚洲欧美日韩综合区| 久久免费看黄a级毛片| 亚洲天堂久久久| 影音先锋女人AV鲁色资源网久久| 久久人人超碰精品CAOPOREN| 久久综合伊人77777| 国产成人久久精品一区二区三区|