在TWAIN中,我选择了本地传输模式,先定义了HANDLE hBitmap;然后执行DG_IMAGE / DAT_IMAGENATIVEXFER / MSG_GET操作后,此操作成功返回。请问如何从这个句柄中获取扫描所得图像的像素值。我采用了如下方法,但获取的像素值并不是本身图像的值。我的代码:
HANDLE hBitmap=NULL;
CallTwainProc(&m_AppId,&m_Source,DG_IMAGE,DAT_IMAGENATIVEXFER,MSG_GET,&hBitmap);LPSTR lpDIB;
LPBITMAPINFOHEADER pHead;
lpDIB = (LPSTR) ::GlobalLock(hBitmap);
LPSTR   lpDIBBits;
lpDIBBits = lpDIB+ sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256;//我采用的是灰度扫描,所以此处Pallete大小为256。这里的lpDIBBits照理应该就是指向图像像素数据的指针了吧?但我将从此处开始的像素值写入一个位图文件,发现所得图像不是扫描原图。
急求各位解答

解决方案 »

  1.   

    HDIB WINAPI CopyHandleToHDIB (HANDLE h)
    {
    if (h == NULL)
    return NULL; // 获取指定内存区域大小
    DWORD dwLen = ::GlobalSize(h);

    // 分配新内存空间
    HDIB hCopy;
    hCopy =(HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwLen);

    // 判断分配是否成功
    if (hCopy != NULL)
    {
    // 锁定
    void* lpCopy = ::GlobalLock((HGLOBAL) hCopy);
    void* lp     = ::GlobalLock((HGLOBAL) h);

    // 复制
    memcpy(lpCopy, lp, dwLen);

    // 解除锁定
    ::GlobalUnlock(hCopy);
    ::GlobalUnlock(h);
    } return hCopy;
    }
      

  2.   

    pDoc->m_hDIB=(HDIB)::CopyHandleToHDIB(hBitmap);