通过视频捕捉设备抓的一个实时的图像,现在可以把它保存为bmp文件,
怎样保存为一个jpg文件?long cbBuffer=0;
HRESULT hr=pGrabber->GetCurrentBuffer(&cbBuffer,NULL);
BYTE *pBuffer=new BYTE[cbBuffer];
hr=pGrabber->GetCurrentBuffer(&cbBuffer,(long*)pBuffer);
//pBuffer中有实时抓的图数据
WriteImageFile(pBuffer,cbBuffer,cts);//此函数是写入bmp文件

解决方案 »

  1.   

    http://msdn.microsoft.com/msdnmag/issues/01/10/c/TOC.ASP
      

  2.   

    好向跟我的要求不一样,我是要把内存中的数据保存为jpg文件
      

  3.   

    从内存中加载可参考:
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
    if(hGlobal == NULL)
    {
      return(FALSE);
    }
    void* pData = GlobalLock(hGlobal);
    memcpy(pData, pBuffer, nSize);
    GlobalUnlock(hGlobal);
    IStream* pStream = NULL;
    if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
    {
      HRESULT hr;
      if((hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_pPict)) == E_NOINTERFACE)
      {
         return(FALSE);
      }
      else // S_OK
      {
       pStream->Release();
       pStream = NULL;
       bResult = TRUE;
       }
    }
     return(bResult);
    }
      

  4.   

    要有CODEC才可以吧。
    去下XIMAGE来做吧。
      

  5.   

    其实可以用GDI+来轻松实现这个功能。解析一下位图的格式,提取出位图头,然后使用Image的FromBITMAPINFO函数来加载到位图
    static Bitmap *FromBITMAPINFO(          
    const BITMAPINFO *gdiBitmapInfo,
    VOID *gdiBitmapData
    );
    最后用Save函数保存
    Save(          
    const WCHAR *filename,//保存的文件名
    const CLSID *clsidEncoder,//保存使用的编码器,如果保存为JPEG就使用JPEG的编码器
    const EncoderParameters *encoderParams//一般为空
    );
    编码器的获得可以使用函数GetEncoderClsid,比如
    CLSID pngClsid;
    GetEncoderClsid(L"image/jpeg", &pngClsid);
    此外gdi+还支持以下几种图片格式
    image/bmp 
    image/jpeg 
    image/gif 
    image/tiff 
    image/png 
    该函数的源码:int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
    {
       UINT  num = 0;          // number of image encoders
       UINT  size = 0;         // size of the image encoder array in bytes   ImageCodecInfo* pImageCodecInfo = NULL;   GetImageEncodersSize(&num, &size);
       if(size == 0)
          return -1;  // Failure   pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
       if(pImageCodecInfo == NULL)
          return -1;  // Failure   GetImageEncoders(num, size, pImageCodecInfo);   for(UINT j = 0; j < num; ++j)
       {
          if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
          {
             *pClsid = pImageCodecInfo[j].Clsid;
             free(pImageCodecInfo);
             return j;  // Success
          }    
       }   free(pImageCodecInfo);
       return -1;  // Failure
    }
      

  6.   

    vc6.0可不可以用GDI+ ?
    =====
    当然可以
      

  7.   

    呵呵,最好的方法是采用jpglib库,因为jpg是采用的 压缩格式,需要编码的,如果你下载到了jpglib,我可以给你提供读写jpg的方法, 你也可以去codeguru ,图像编程下面,有例子
      

  8.   

    我这里有一个jpglib2.dll库,但是不知道怎么用
    jpglib和jpglib2是不是一样的
      

  9.   

    呵呵,楼主还没有搞定啊,给你一个地址,去看看吧,很对你的路子
    http://www.codeguru.com/Cpp/G-M/bitmap/otherformats/article.php/c1731/