设备相关位图(DDB)与设备无关位图(DIB) 的区别

设备相关位图 DDB(Device-Dependent-Bitmap)

    DDB不具有自己的调色板信息,他的颜色模式必须与输出设备相一致。如:在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。

设备无关位图DIB(Device-Independent-Bitmap)

    DIB具有自己的调色板信息,他可以不依赖系统的调色板。由于他不依赖于设备,所以通常用它来保存文件,如.bmp格式的文件就是DIB.

 

HBITMAP与BITMAP的区别

BITMAP 是一个结构:  
   
  typedef   struct   tagBITMAP   {     /*   bm   */  
          int           bmType;  
          int           bmWidth;  
          int           bmHeight;  
          int           bmWidthBytes;  
          BYTE         bmPlanes;  
          BYTE         bmBitsPixel;  
          LPVOID     bmBits;  
  }   BITMAP;   

HBITMAP  是一个指向BITMAP的句柄

  HBITMAP   HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
  BITMAP   bm;  
  GetObject(hBmp,sizeof(bm),&bm);  可以通过该函数 由HBITMAP取得BITMAP;

如何通过BITMAP构造一个.bmp格式的文件

        LoadImage从磁盘中读取.bmp文件转换成了易于系统操作的HBITMAP文件,但很多时候又需要将BITMAP数据存储下来,如:存储,D3DXCreateTextureFromFileInMemory()需要严格的.bmp格式的数据才行;

  构建BITMAPFILEHEADER  bfileh; 并填充;构建BITMAPINFOHEADER binfoh并填充;

  将上述两者数据和BITMAP.bmBits的数据拷贝到一个缓冲区即可;

 memcpy( buffer, sizeof(BITMAPFILEHEADER), bfileh);

memcpy( &buffer[sizeof(BITMAPFILEHEADER)], sizeof(BITMAPINFOHEADER), binfoh);

memcpy( &buffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)],  图形数据区字节长度, bitmap.bmBits);

 

其他一些DIB,DDB有用的函数:

GetDIBits();          // 获取HBITMAP的自定数据区,要自己拿个空间去接受这些数据;

GetBitmapBits();   // 获取HBITMAP中bitmap的指定数据区

CreateDIBSection();  // 创建一个自定义的位图

转载于:https://www.cnblogs.com/Jade2009/archive/2009/05/11/1454263.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值