zoukankan      html  css  js  c++  java
  • DDB 和 DIB (截窗口)

    位图分为两种DDB和DIB
         DIB:即兼容位图,独立于设备存在,有描述颜色格式的信息头,如256色1字节、真色彩argb。存在于内存中,是我们写程序的时候能控制的有位图数据格式的数据
         DDB:即设备位图,已经被gdi考到显存后的图像格式,没有信息头,显示格式就是当前的显示设备支持的格式。是我们不能控制的,我们只能通知gdi将某个DIB转化为DDB拷贝到显存显示,是不能直接控制DDB的

    获得DIB的数据:
      直接用GetBitmapBits
    获得DDB的数据:
         将位图画到一个自己创建的兼容DC,再创建一个兼容DIB位图,用BitBlt把数据从当前DC拷贝到兼容位图,再用GetBitmapBits得到兼容位图数据。这种方法是能得到a(同明度的值的),只是性能不是很高,更好的办法还不知道,不过gdi好像做不到性能更高的办法

    用过GDI画图函数以后,如果BITMAP原来就是DIB那,直接GetBitmapBits就能得到数据,如果是DDB则要创建兼容DC和兼容DIB位图画上然后再在GetBitmapBits。

    CreateBitmap                    试图创建DDB,失败创建DIB
    CreateBitmapIndirect          试图创建DDB,失败创建DIB
    CreateCompatibleBitmap     试图创建DDB,失败创建DIB
    CreateDIBitmap                  试图创建DDB,失败创建DIB
    CreateDIBSection                直接创建DIB

    具体代码:

    DIB获取:

    LPVOID    bitmapData=NULL;
    hBitmap =CreateCompatibleBitmap(h,width,height);
    GetBitmapBits(hBitmap,width*height*4,bitmapData);
    for(int i=0 ;i<width*height;i++){
        unsigned char b  = *((char*)bitmapData+i*4) ;
        unsigned char g  = *((char*)bitmapData+i*4+1) ;
        unsigned char r  = *((char*)bitmapData+i*4+2) ;
        unsigned char a  = *((char*)bitmapData+i*4+3) ;
    }

    DDB获取:

        
    LPVOID    bitmapData=NULL;
    
    int width = 100;
    int height = 100;
    
    
    HDC hdc = GetDC(hWnd);//hWnd为DDB所在窗口句柄
    hCDC = CreateCompatibleDC(hdc);
    hBitmap =CreateCompatibleBitmap(h,width,height);
    SelectObject(hCDC,hBitmap); 
    BitBlt(hCDC,0,0,width,height,h,0,0,SRCCOPY);
    
    GetBitmapBits(hBitmap,width*height*4,bitmapData);
        
    for(int i=0 ;i<width*height;i++){
        unsigned char b  = *((char*)bitmapData+i*4) ;
        unsigned char g  = *((char*)bitmapData+i*4+1) ;
        unsigned char r  = *((char*)bitmapData+i*4+2) ;
        unsigned char a  = *((char*)bitmapData+i*4+3) ;
    }
  • 相关阅读:
    ngInclude与script加载模板
    ng-model-options
    angular模板加载 ----ng-template
    ngBind ngBindTemplate ngBindHtml
    ng-switch
    ng-show与ng-if区别
    运维教给我什么
    路漫漫其修远兮,吾将上下而求索
    那些让我们继续坚持下去句子
    随手记
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3016354.html
Copyright © 2011-2022 走看看