装备相干位图(DDB)与装备有关位图(DIB) 的差别

  装备相干位图 DDB(Device-Dependent-Bitmap)

  DDB不具有自己的调色板信息,他的色彩形式必须与输入装备相不合。如:在256色以下的位图中存储的像素值是系统调色板的索引,其色彩依附于系统调色板。因为DDB高度依附输入装备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。

  装备有关位图DIB(Device-Independent-Bitmap)

  DIB具有自己的调色板信息,他可以不依附系统的调色板。因为他不依附于装备,所以平日用它来保管文件,如.bmp格局的文件就是DIB.

  HBITMAP与BITMAP的差别

  BITMAP 是一个结构:

  typedef struct tagBITMAP {

  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(); // 创立一个自定义的位图