你就用cvSaveImage吧 对OpenCV来说好像没有别的方法 因为OpenCV读入一个图像后已经转换成一个统一的格式了
你想在内存中用Jpg 那么jpg就算是OpenCV给你转换好了 再处理的时候还是跑回统一格式,没有用处了。如果你只想转换格式,直接用CxImage好一点

解决方案 »

  1.   

    不需要CxImage这样的第三方扩展库
    微软的GDI+也可以转换的
    CImage   mmage;   
        HWND   hWnd   =   ::GetDesktopWindow();//获得屏幕的HWND.   
        HDC   hScreenDC   =   ::GetDC(hWnd);       //获得屏幕的HDC.   
        HDC   MemDC   =   ::CreateCompatibleDC(hScreenDC);   
        RECT   rect;     
                
        ::GetWindowRect(hWnd,&rect);   
          
        HBITMAP   hBitmap   =   ::CreateCompatibleBitmap(hScreenDC,rect.right,rect.bottom);   
        HGDIOBJ   hOldBMP   =   ::SelectObject(MemDC,hBitmap);   
        ::BitBlt(MemDC,0,0,rect.right,rect.bottom,hScreenDC,rect.left,rect.top,SRCCOPY);   
        hBitmap=(HBITMAP)::SelectObject(MemDC,hOldBMP);   
          
        mmage.Attach(hBitmap);   
        IStream*   pStmImage   =   NULL;   
                
        HGLOBAL   hMemBmp   =   GlobalAlloc(GMEM_MOVEABLE,0);//可移动的缓冲区   
        if   (hMemBmp   ==   NULL)   return 0;   
        CreateStreamOnHGlobal(hMemBmp,   FALSE,   &pStmImage);//将内存区B作为流的起始   
        if   (pStmImage   ==   NULL)   
        {   
            GlobalFree(hMemBmp);   
            AfxMessageBox("为空");   
            return   0;   
         }   

    mmage.Save(pStmImage,Gdiplus::ImageFormatJPEG);   
    以上是把屏幕截图换成内存BMP
    再在内存中把BMP换成JPG
    这是我的一个桌面监控用的代码 完全没有文件IO 就在内存中转换
    BMP-JPEG
      

  2.   

    要的是在内存中转换,CXImage类可以做到吗
      

  3.   

    或者怎么把jpg转为BMP,用Opencv或cximage,有例子没