首页 > 代码库 > VC++使用CImage在内存中Bmp转换Jpeg图片

VC++使用CImage在内存中Bmp转换Jpeg图片

unsigned long BMP2JPEG(char* pUnZipData,unsigned long ulUnZipDataLen,char** pBuffer)
{
    unsigned long ulBufferLen = 0;
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, ulUnZipDataLen); 
    void* pData = http://www.mamicode.com/GlobalLock(hGlobal);
    memcpy(pData, pUnZipData, ulUnZipDataLen); 
    GlobalUnlock(hGlobal); 
    IStream* pStream = NULL; 
    if(CreateStreamOnHGlobal(hGlobal, TRUE,  & pStream) == S_OK) 
    {
        CImage image; 
        if (SUCCEEDED(image.Load(pStream))) 
        {
            IStream* pOutStream = NULL; 
            if(CreateStreamOnHGlobal(NULL, TRUE,  & pOutStream) == S_OK) 
            {
                image.Save(pOutStream, Gdiplus::ImageFormatJPEG);
                HGLOBAL hOutGlobal= NULL;
                GetHGlobalFromStream(pOutStream,&hOutGlobal);
                LPBYTE pBits= (LPBYTE)GlobalLock(hOutGlobal);
                ulBufferLen =(DWORD)GlobalSize(pBits);
                *pBuffer = new char[ulBufferLen];
                memcpy(*pBuffer, pBits, ulBufferLen);
                 
                GlobalUnlock(hOutGlobal);
                pOutStream->Release();
            }
        }  
        pStream->Release();      
    }  
    GlobalFree(hGlobal); 
    return ulBufferLen;
}

VC++使用CImage在内存中Bmp转换Jpeg图片