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

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日产精品99久久久久久| 久久久久国色AV免费观看| 久久久SS麻豆欧美国产日韩| 日韩十八禁一区二区久久| 亚洲а∨天堂久久精品| 亚洲精品蜜桃久久久久久| 99久久777色| 青青热久久国产久精品 | 99久久国产亚洲高清观看2024 | 国产精品九九久久免费视频 | 久久久91人妻无码精品蜜桃HD| 亚洲国产成人久久一区久久| 久久精品成人免费网站| 国产高清美女一级a毛片久久w| 嫩草影院久久国产精品| 色偷偷91久久综合噜噜噜噜| 久久精品国产亚洲av高清漫画| 精品视频久久久久| 久久人人爽人人爽人人片AV不 | 中文字幕无码久久人妻| 久久天堂AV综合合色蜜桃网| 青春久久| 久久精品男人影院| 日韩电影久久久被窝网| 品成人欧美大片久久国产欧美 | 777久久精品一区二区三区无码| 久久中文字幕人妻丝袜| 亚洲国产精品一区二区久久| 亚洲精品无码成人片久久| 免费精品久久久久久中文字幕| 91久久精品91久久性色| 日本久久久久亚洲中字幕 | 国产亚洲美女精品久久久2020| 久久乐国产精品亚洲综合| 久久无码av三级| 国产一级做a爰片久久毛片| 久久午夜无码鲁丝片| 久久精品午夜一区二区福利| 亚洲精品乱码久久久久久蜜桃不卡 | 久久久久久午夜精品| 色8激情欧美成人久久综合电|