现在我的程序中有一个BYTE数组,我希望将这些byte数据保存到一个256色位图(比如一个20 * 30)中,该怎么实现?因为通常对于一个256色的DIB位图来说,该位图文件包含一个BITMAPFILERHEADER, BITMAPINFO,然后才是byte数据,但现在我只有byte数据,我能通过这些byte数据创建一个位图吗?BITMAPINFO中的color table怎么定义啊?
BITMAPFILERHEADER中的数据又怎么填充????

解决方案 »

  1.   

    HBITMAP CreateDIBitmap(
      HDC hdc,                        // 没有的话 ::GetDC(NULL);
      CONST BITMAPINFOHEADER *lpbmih, // bitmap data
      DWORD fdwInit,                  // CBM_INIT
      CONST VOID *lpbInit,            // initialization data
      CONST BITMAPINFO *lpbmi,        // byte数据
      UINT fuUsage                    // color-data usage
    );
    BITMAPINFO可以用BITMAPINFOHEADER强制转换    
    typedef struct tagBITMAPINFOHEADER{
      DWORD  biSize; //sizeof(BITMAPINFOHEADER)
      LONG   biWidth; //20
      LONG   biHeight; //30
      WORD   biPlanes; //1
      WORD   biBitCount //256
      DWORD  biCompression;//BI_RGB
      DWORD  biSizeImage; //byte数据大小
      LONG   biXPelsPerMeter; //0
      LONG   biYPelsPerMeter; //0
      DWORD  biClrUsed; //256
      DWORD  biClrImportant; //0
    } BITMAPINFOHEADER, *PBITMAPINFOHEADER; 
      

  2.   

    CreateDIBitmap(::GetDC(NULL)//记得释放,//BITMAPINFOHEADER,CBM_INIT,// BITMAPINFO(BITMAPINFOHEADER),//byte数据,DIB_RGB_COLORS);
    注意:我写的是结构,你要把他写成变量啊~~~
      

  3.   

    BITMAPINFO中的color table呢?就是bmiColors这个数组,里面的值怎么确定?
      

  4.   

    怎么会只有byte数据呢?我还没碰到过哦
      

  5.   

    就这么说吧,我有一个矩阵,比如说一个200×300的矩阵,里面的数据在0-255之间,现在我希望通过位图的形式把这个矩阵显示出来!我可以将这个矩阵的数据转换成相应的byte数组,这就是我只有byte数组的原因!因为生成一个DIB位图(一个256色的位图),必须指定颜色表,我现在的问题就是不知道怎样获取这个颜色表!!!!!!为什么BITMAPINFO具有下面的结构?
    typedef struct tagBITMAPINFO {
        BITMAPINFOHEADER    bmiHeader;
        RGBQUAD             bmiColors[1];
    } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;很显然,我们的位图bmiColors的数量远远不止1个,但是该结构只定义一个,其他颜色表的数据存放在什么地方啊???或者它应该定义成一个指针啊,比如:
    typedef struct tagBITMAPINFO {
        BITMAPINFOHEADER    bmiHeader;
        RGBQUAD*            lpbmiColors;
        int clrCount; // lpbmiColors中的颜色表个数
    } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;大家对这个“奇怪”的结构怎么理解?
      

  6.   

    IS THERE NO ONE CAN ANSWER MY QUESTION????
      

  7.   

    不管它,强制类型转换就可以了,“BITMAPINFO可以用BITMAPINFOHEADER强制转换”,试试就知道了
      

  8.   

    答非所问!BITMAPINFOHEADER当然可以转换成BITMAPINFO,但是这只能让编译通过,BITMAPINFO中的颜色表你能通过转换得到吗????这样转换过后程序能得到正确的结果吗?
      

  9.   

    气死人了,也不试一下,我又不是没用过,我用的是视频采集卡,得到的数据只有BITMAPINFOHEADER和位图数据,用了N长时间了,也没发生医疗纠纷(我是做医学图像的),你不相信我,还问什么?你找着我的方法得不到这确的结果,就让斑竹封我的账号!!!
      

  10.   

    EnochShen,言重了!呵呵~~~