是要从视频流里采集到bmp图片,就是点击拍照按钮显示在界面指定位置上,点击一次显示一张图片,使用的是LoadImage,可是总是加载失败,图片是显示出来了,可是大小不一样,上下颠倒,左右颠倒,郁闷啊
  CBitmap m_bitmap;
HBITMAP hbmp;
hbmp=(HBITMAP)::LoadImage(NULL,_T("test.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);CWnd *pWnd=GetDlgItem(IDC_PICTURE);
CDC *pDC=pWnd->GetDC();
pDC->SetStretchBltMode(STRETCH_HALFTONE); StretchDIBits(   // 在视图客户区显示图像
pDC->GetSafeHdc(),
0,         
0,                  
285,//760,//m_nMaxWid,
253,//650,//m_nMaxHei,
0,
0,
352, // 图像宽度
288, // 图像高度
pDataBuf, // 图像缓冲区
m_pBmpInfo, // BMP图像描述信息
DIB_RGB_COLORS,
SRCCOPY
);
pWnd->ReleaseDC(pDC);

解决方案 »

  1.   

    http://www.cnblogs.com/sjhrun2001/archive/2010/01/18/1650246.html
      

  2.   

        pDC->GetSafeHdc(),
            0,                                
            0,                  
            352,            
            288, 
                 
            0,
            0,
            352,            // 图像宽度
            288,            // 图像高度
    这样呢
      

  3.   

    强烈推荐CImage类 可以处理多种类型的图片 很强大的
      

  4.   

    放在ondraw里面 pDC是onDraw的CDC*类型参数
    CImage* sourceImage = new CImage;
    sourceImage->Load("H:\\a.bmp");//大部分类型图片都可以
    sourceImage->StretchBlt(*pDC,0,0,width,height,0,0,width,height,SRCCOPY);//width是图片宽度,height为高度 
      

  5.   

    StretchDIBits(   // 在视图客户区显示图像
            pDC->GetSafeHdc(),
            0,                                
            0,                  
            285,//760,//m_nMaxWid,            
           -253,//650,//m_nMaxHei,                
            0,
            0,
            352,            // 图像宽度
            288,            // 图像高度
            pDataBuf,        // 图像缓冲区
            m_pBmpInfo,            // BMP图像描述信息
            DIB_RGB_COLORS,
            SRCCOPY
            );
    这样就可以颠倒过来,没试验过,楼主试试
      

  6.   

    这个是CImage类的用法 自己调试一下就知道了 肯定没错,我用了半年了Cimage类
      

  7.   

    HRESULT ShowPic(CDC *pDC,CString lpstrFile, int nScrWidth, int nScrHeight)
    {
    IPicture  *pPic;  
        IStream   *pStm;  
        BOOL      bResult;  

        HANDLE    hFile=NULL;  
        DWORD     dwFileSize,dwByteRead;  

        //打开硬盘中的图形文件  
        hFile=CreateFile(lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
        if (hFile!=INVALID_HANDLE_VALUE)  
        {  
            dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数  
            if(dwFileSize==0xFFFFFFFF)  
            {
                CloseHandle(hFile);
                return E_FAIL;  
            }
        }  
        else  
        {  
            return E_FAIL;  
        }  


        //分配全局存储空间  
        HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);  
        if(hGlobal==NULL)  
            return E_FAIL;  

        LPVOID  pvData =GlobalLock(hGlobal);  

        if(pvData==NULL)//锁定分配内存块  
        {
            GlobalFree(hGlobal);
            return E_FAIL;  
        }
        ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区  
        CloseHandle(hFile);//关闭打开的文件  

        GlobalUnlock(hGlobal);      CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);  

        //装入图形文件  
        bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);  
        GlobalFree(hGlobal);

        if(FAILED(bResult))  
            return E_FAIL;  

        long   hmWidth;//图片的真实宽度  
        long   hmHeight;//图片的真实高度  
        pPic->get_Width(&hmWidth);  
        pPic->get_Height(&hmHeight);  


        //将图形输出到屏幕上(有点像BitBlt)  
        bResult=pPic->Render(pDC->m_hDC,0,0,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);  

        pPic->Release();  

        if(SUCCEEDED(bResult))  
        {  
            return   S_OK;  
        }  
        else  
        {  
            return   E_FAIL;  
        } 

    }
    这个代码能正确显示图像,但是不知道哪里出问题,内存一直在缓慢上涨,望高手解答