draw方法的问题喽,hdc那里有定义?

解决方案 »

  1.   

    你的hdc是从哪里获取的?参考这里
      

  2.   

    hdc就在Main中获取的,执行Draw的时候会报Assertion Failed的错误。
    CImage Mat2Image(Mat mat)
    {
    CImage ci;
    //-----------Process---------------------
    return ci;
    }
     
    void main()
    {
    Mat mat;
    //--------------get Mat-------------------------
    CDC* pDC=GetDlgItem(IDC_DISP0)->GetDC();
    HDC hDC=pDC->GetSafeHdc();
    CImage ci;
    ci=Mat2Image(mat);
    ci.draw(hdc,0,0);
    }
      

  3.   

    http://blog.csdn.net/bojie5744/article/details/38052189关于CImage加载透明图片
      

  4.   

    [color=#FF0000]void main()
    {
    Mat mat;
    //--------------get Mat-------------------------
    CImage ci;
    ci=Mat2Image(mat);
    ci.draw(hdc,0,0);
    }
    在main函数中进行判空操作,判断是否返回空指针,[/color]
      

  5.   

    CImage没重载赋值(=)操作(即不支持),所以不能直接把变量返回。可以使用指针或引用。你的全局变量也是一种方法
      

  6.   

    为什么全局变量就可以:
      函数的返回值其实发生了值得复制。
    CImage Mat2Image(Mat mat)
    {
         CImage ci;
        //-----------Process---------------------
        return ci;
    }外界从Mat2Image函数得到的CImage 对象已经不是ci了,而是ci的复制品。这个复制的过程是微软CImage自己做的,可能复制的不好。你真正想要的ci因为是局部变量,其实早就完蛋了。估计他的像素及内部的很多成员变量都没复制走。所以建议你此处返回指针:CImage* Mat2Image(Mat mat)
    {
         CImage *ci = new CImage;
        //-----------Process---------------------
        return ci;
    }或者用引用来做:void Mat2Image(Mat mat,CImage &ci)
    {    //-----------Process---------------------}