我想在对话框的OnPaint()里根据路径贴一副图片,路径保存在str里,内容如下
void CBmpDLg::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
    CString str = m_strBmpPath + m_strBmpName;//保存图片路径
        
    HBITMAP  hBmp = (HBITMAP)::LoadImage(NULL,str,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);    
    if (hBmp = NULL)
    {
        MessageBox("");
    }    CDC dcCompatible;
    dcCompatible.CreateCompatibleDC(&dc);
    dcCompatible.SelectObject(hBmp);
    dc.BitBlt( 10,10,362,298,&dcCompatible,0,0,SRCCOPY );
  
    DeleteDC(dcCompatible); 
}
但是图片显示不出来,请问是哪里的问题?

解决方案 »

  1.   

    if (hBmp = NULL)
    --->
    if (hBmp == NULL)
    另外,确保BitBlt参数(尺寸)要正确,GDI资源用后要选出DC销毁。
      

  2.   

    谢谢楼上,昨天我看了一下,我用的图片是从视频解码控件上抓拍下来的图,可能是解码控件的问题,我发现抓拍下来的bmp图片和一般的bmp图片的头不一样,普通的bmp图片就能显示,抓拍下来的不能显示
      

  3.   

    请问LZ,你抓的bmp能用图片浏览器打开吗?如果能打开,还是你的代码有问题,如果不能,就是你的图片有问题.
      

  4.   

    能打开啊,可是其bmp他图片能显示啊,唯独抓下来的图片不能显示,图片浏览器可以打开,我比较了一下两幅bmp图片的区别,发现头不一样
      

  5.   

    CBitmap bitmap;
    CDC dcMemory;
    bitmap.LoadBitmap(IDB_JJ_BITMAP);
    //CDC类的LoadBitmap函数负责将一个基于资源的DIB转换为GDI位图。
    /*当然如果该资源位于DLL或者其他EXE中,可以采取下面办法得到其指针:
    LPVOID lpvResource=(LPVOID)::LoadResource(NULL,
                                              ::FindResource(NULL,
                                     MAKEINTRESOURCE(IDB_JJ_BITMAP),
                     RT_BITMAP)
      );
    */
    //之所以能用调用,是因为在进程生存期内,他们(资源)所占用的虚拟地址空间不发生任何改变,
    //我们可以用以上代码获得DIB地址。
    dcMemory.CreateCompatibleDC(pDC);
    dcMemory.SelectObject(&bitmap);
    pDC->BitBlt(10,10,400,300,&dcMemory,0,0,SRCCOPY);
    pDC->BitBlt(420,10,200,200,&dcMemory,0,0,SRCCOPY);
    pDC->BitBlt(10,320,180,300,&dcMemory,130,0,SRCCOPY);
    //当映射模式不是MM_TEXT的时候,如果我想让IDB_JJ_BITMAP占据一个400*300象素的矩形框,
    //那么可以采用下面3个语句来取代BITBLT调用,那么无论映射模式是什么,
    //IDB_JJ_BITMAP都将清晰的显示出来
    /*=========================================================
    CSize size(400,300);
    pDC->DPToLP(&size);
    pDC->StretchBlt(0,0,size.cx,-size.cy,&dcMemory,0,0,400,300,SRCCOPY);
    =========================================================*/
      

  6.   

    你把抓的图片发到我的信箱一个,我试试[email protected]
      

  7.   

    主要是你的图片有问题.它可能只是空有.bmp后缀,并不是真正的bmp.我用CxImage和IPicutre指针都能加载.弱弱的问一句,你就一定要用HBITMAP吗?
    如果是的话,请把你的抓拍程序改改,严格按照位图的结构保存.
    不是的话就简单了,换个方式加载.网上比较多的是借助CPicture类,很好用的
      

  8.   

    我在视频解码控件里抓拍的,里面有一个图片格式转换为bmp,估计是转换&保存的时候出问题了