如何得到HBITMAP指向的位图的位数据的指针(100分)
在线等...

解决方案 »

  1.   


    LONG GetBitmapBits(
      HBITMAP hbmp,      // handle to bitmap
      LONG cbBuffer,     // number of bytes to copy
      LPVOID lpvBits     // pointer to buffer to receive bits
    );
      

  2.   

    DWORD *bfSize,Size;//bmp文件大小
    BYTE *lpBits;//指向文件位数据指针
    lpBits = (BYTE*)HeapAlloc(GetProcessHeap(),0,20);//先想法得到文件大小,bmp文件开头的sizeof(UINT)处有一个DWORD类型的数据,存放文件大小,
    GetBitmapBits(hbm,20, lpBits);
    lpBits += sizeof(UINT);
    bfSize = (unsigned long *)lpBits;
    Size = *bfSize;
    HeapFree(GetProcessHeap(),0,lpBits);
    lpBits = (BYTE*)HeapAlloc(GetProcessHeap(),0,Size);
    GetBitmapBits(hbm,Size,lpBits);
      

  3.   


    LPVOID GetData(HBITMAP hbp)
    {
        BITMAP bm ;
        GetObject(hbp,sizeof(BITMAP),&bm);
        return bm.bmBits ;
    }
      

  4.   

    GetBitmapBits
    是把指定的数据copy过来吧。我需要的是修改数据就可反映到位图中。
      

  5.   

    (我也不是很清楚,但是:)对用::LoadImage (::AfxFindResourceHandle(
    MAKEINTRESOURCE (inBitmapID), RT_BITMAP),
    MAKEINTRESOURCE (inBitmapID), IMAGE_BITMAP, 0, 0,
    (LR_DEFAULTSIZE | LR_CREATEDIBSECTION));
    载入的24位色的位图,可以直接得到数据区// get a pointer to the pixels
    DIBSECTION  ds;
    VERIFY (ioBM.GetObject (sizeof (DIBSECTION), &ds) == sizeof (DIBSECTION));
    RGBTRIPLE* pixels = reinterpret_cast<RGBTRIPLE*>(ds.dsBm.bmBits);
      

  6.   

    只能把位图数据考备出来,要想得到HBITMAP的DIB指针是不可能的。
    只有DIBSECTION在你得到HBITMAP handle时,同时拥有其DIB的指针.