zoukankan      html  css  js  c++  java
  • VC++使用CImage在内存中Bmp转换Jpeg图片

    之前写了一篇《VC++使用CImage在内存中Jpeg转换Bmp图片》,通过CImage实现了在内存中Jpeg转Bmp。

    既然Jpeg能转Bmp,那CImage也支持Bmp转Jpeg,与上一篇文章依赖CImage的Load函数相反,Bmp转Jpeg通过Save函数实现:

    使用的也是IStream接口的函数重载,具体可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/d06f3fhw.aspx

    下面贴出使用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 = 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;
    }
    

    记录,为更好的自己!

  • 相关阅读:
    appcan封装好的ajax,解决onDATA覆盖问题
    待研究
    mysql主从实验
    jQuery动态加载JS以减少服务器压力
    HTTP协议详解
    企业站收藏
    Linux查看程序端口占用情况
    大流量网站优化
    营销类网站
    Nginx (简体中文)
  • 原文地址:https://www.cnblogs.com/ym123/p/4174714.html
Copyright © 2011-2022 走看看