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) ;
    }
  • 相关阅读:
    什么是函数式编程
    红包算法
    laravel中查看执行的SQL语句
    身份证号信息后台匹配
    在函数内部访问外部的变量
    设计模式-观察者模式
    laravel查询构造器操作数据库
    linux根目录文件夹的作用
    关于laravel连接数据库报错
    设定起始日期,遍历到今天的日期
  • 原文地址:https://www.cnblogs.com/wangjixianyun/p/3016354.html
Copyright © 2011-2022 走看看