现在有一个activex控件,它的某个事件里面返回一个long hImage参数(指向一个bitmap位图)
怎么才能把这个位图的内容拷贝到一个缓冲区中?(我需要保存到数据库中)

解决方案 »

  1.   

    利用 GetDIBitsBITMAPINFOHEADER bmiHdr;
    memset(&bmiHdr, 0, sizeof(bmiHdr)); // initialize to zero is neccessary
    bmV4Hdr.bV4Size = sizeof(bmiHdr);// receive bitmap header infomations
    GetDIBits(hDC, hBitmap, 0, 0, NULL, (LPBITMAPINFO)&bmiHdr, DIB_RGB_COLORS);LPBYTE pszDIB = new BYTE[bmiHdr.biSize + bmiHdr.biSizeImage];
    memcpy(pszDIB, &bmiHdr, sizeof(bmiHdr));// receive the DIB bits
    GetDIBits(hDC, hBitmap, 0, bmiHdr.biHeight, 
    pszDIB + bmiHdr.biSize, (LPBITMAPINFO)pszDIB, DIB_RGB_COLORS);LPVOID pvDIBits = pszDIB + bmiHdr.biSize;pvDIBits 保存了返回的位图数据。以上代码省略了错误处理及 8-bit 调色板位图的处理,此外,数据的格式和 bmiHdr.biBitCount 有关,其中每个扫描行的字节数为:#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
      

  2.   

    to In355Hz(好象一条狗)
    为什么中途冒出一个bmV4Hdr?
      

  3.   

    是不是应该为:bmiHdr.biSize =sizeof(bmiHdr);?