像 GetDIBits GetBitmapBits 之类的函数都是需要重新分配一块内存,再把图像数据拷贝到这个快内存的,但是一个位图如果已经被加载(句柄不为0),那么他肯定是已经在内存中分配了相关的数据的,有没有那个函数能直接获得这个地址呢?

解决方案 »

  1.   

    BITMAP   bm;  
    ::GetObject(hCaptureBitmap,sizeof(bm),(LPVOID)&bm); 用上面的函数,在有些情况下bm的bmBits返回值为0。
      

  2.   


    hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER)); 
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); 
    后移43位即可
      

  3.   

    在使用:
    hSkinBmp = (HBITMAP)LoadImage(0, "skin01.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);如果没有:
    LR_LOADFROMFILE | LR_CREATEDIBSECTION
    “用上面的函数,在有些情况下bm的bmBits返回值为0。”
      

  4.   


    这个已经解释的清楚了。BITMAP在系统里面总得来说分为两种,设备相关,设备无关。
    从文件读取的和通过CreateDIBSection函数创建的位图为设备无关的,这些位图可以用GetObject函数取得Bit数组的内存地址。
    但是通过DC获得的BITMAP是设备相关的,通过GetObject函数只能取到位图的H,W,颜色信息,其他的信息通过常规方法应该是取不到的。