IplImage * Image1;
CvSize Size1=cvSize(640,480);
Image1=cvCreateImage(Size1,IPL_DEPTH_8U,3); 
memcpy(Image1->imageData,buffer,640,480);
Image1->widthStep=480; 
Image1->origin=0;

解决方案 »

  1.   

    memcpy(Image1->imageData,buffer,640,480);
    这个写得不对吧?是不是
    memcpy(Image1->imageData,buffer,640*480);啊
      

  2.   

    widthStep 在Create的时候已经算好了,为什么还要给他赋值,而且也不是 480,三通道是 480 * 3,代表单行字节数.
      

  3.   

    要乘以* 3呀 谢谢 我明天试试  Image1->origin=0;//是代表啥呢???
      

  4.   

    ////AVideoImage数组byte类型保存着1280*960大小的jpeg图片 数据是100000多字节
    UINT size = pFile->Read(AVideoImage,200000);//
    if(size)
    {
    IplImage * Image1;
    CvSize Size1=cvSize(1280,960);//这个图片的长与宽 ,根据什么来算呢???
    Image1=cvCreateImage(Size1,IPL_DEPTH_8U,3); 
    memcpy(Image1->imageData,AVideoImage,size);
    Image1->widthStep= 3 * 1280; 
    Image1->origin=0;
    DrawPicToHDC(Image1,IDC_STATIC);
    cvReleaseImage(&Image1);
    }
      

  5.   

    origin 暂时无用,也不需要赋值。给IplImage赋值正确的写法是
    memcpy(Image1->imageData, buffer, Image1->imageSize);
      

  6.   


    //GDI+ 没有解码功能吧 ,下面封装的ImageFromIDResource函数 直接能把jpeg数据转成图片啊。
    opencv没有????????????????
    ImageFromIDResource(AVideoImage,size,m_pVideoImage);BOOL CCanonFrmDlg::ImageFromIDResource( unsigned char * lpResStreamName,unsigned int len,Gdiplus::Image * &pImg )
    {
    // Allocate global memory on which to create stream
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
    memcpy(pmem,lpResStreamName,len);
    IStream* pstm;
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
    // load from stream
    pImg=Gdiplus::Image::FromStream(pstm);
    // free/release stuff
    pstm->Release();
    GlobalUnlock(m_hMem);
    return TRUE;
    }
      

  7.   

    IplImage 传进去的是纯图像数据。GDI+传进去的是带数据头的数据,自然底层可以解码。
      

  8.   

    啊 ! 那opencv 怎么解析带数据头的数据吗????
      

  9.   

    opencv 怎么解析带数据头的数据吗????