我从屏幕中抓取了一幅图像(BMP格式),现在想在内存中 把它转换为JPEG流然后发送出去请教各位图像高手有什么好办法!

解决方案 »

  1.   

    codeproject.com 找 cximage。对你的应用来说,它有点大
      

  2.   

    #include "stdafx.h"
    #include "CaptureVideo.h"
    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif
    BOOL bOneShot=FALSE;//全局变量
    class CSampleGrabberCB : public ISampleGrabberCB 
    {
     public:
      long lWidth;
      long lHeight;
      TCHAR m_szFileName[MAX_PATH];// 位图文件名称
      CSampleGrabberCB( ){
       strcpy(m_szFileName, "c:\\donaldo.bmp");
      } 
      STDMETHODIMP_(ULONG) AddRef() { return 2; }
      STDMETHODIMP_(ULONG) Release() { return 1; }
      STDMETHODIMP QueryInterface(REFIID riid, void ** ppv){
      if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ){ 
       *ppv = (void *) static_cast<ISampleGrabberCB*> ( this );
       return NOERROR;
      } 
      return E_NOINTERFACE;
     }
     STDMETHODIMP SampleCB( double SampleTime, IMediaSample * pSample ){
     return 0;
    }
    STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize ){
     if( !bOneShot )return 0;
     
     if (!pBuffer)return E_POINTER;
     SaveBitmap(pBuffer, lBufferSize);
     bOneShot = FALSE;
     return 0;
    }
    //创建位图文件
    BOOL SaveBitmap(BYTE * pBuffer, long lBufferSize )
    {
     HANDLE hf = CreateFile(
     m_szFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL,
     CREATE_ALWAYS, NULL, NULL );
     if( hf == INVALID_HANDLE_VALUE )return 0;
      // 写文件头 
      BITMAPFILEHEADER bfh;
      memset( &bfh, 0, sizeof( bfh ) );
      bfh.bfType = ’MB’;
      bfh.bfSize = sizeof( bfh ) + lBufferSize + sizeof( BITMAPINFOHEADER );
      bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );
      DWORD dwWritten = 0;
      WriteFile( hf, &bfh, sizeof( bfh ), &dwWritten, NULL );
      // 写位图格式
      BITMAPINFOHEADER bih;
      memset( &bih, 0, sizeof( bih ) );
      bih.biSize = sizeof( bih );
      bih.biWidth = lWidth;
      bih.biHeight = lHeight;
      bih.biPlanes = 1;
      bih.biBitCount = 24;
      WriteFile( hf, &bih, sizeof( bih ), &dwWritten, NULL );
      // 写位图数据
      WriteFile( hf, pBuffer, lBufferSize, &dwWritten, NULL );
      CloseHandle( hf );
      return 0;
     }
    };希望有借鉴
      

  3.   

    如果你说是保存成jpg文件就可以用cimage,jpg流就不太清楚