博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++使用CImage在内存中Bmp转换Jpeg图片
阅读量:7179 次
发布时间:2019-06-29

本文共 1269 字,大约阅读时间需要 4 分钟。

之前写了一篇《》,通过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;}

记录,为更好的自己!

转载于:https://www.cnblogs.com/ym123/p/4174714.html

你可能感兴趣的文章
13年下半年信息系统项目管理师考试总结
查看>>
为什么受伤的总是技术大牛
查看>>
我的友情链接
查看>>
Composer 笔记(PHPconf 台湾)
查看>>
linux双网卡绑定
查看>>
Python 三元运算符与lambda
查看>>
ethtool 的使用方法
查看>>
用NGUI动态添加和删除Sprite
查看>>
C语言的历史与应用
查看>>
页面分享到微博、qq、qqzone
查看>>
Java语言的基础知识4
查看>>
docker registry v2 nginx
查看>>
完全卸载Oracle10g 方法:
查看>>
SpringMVC+shiro权限拦截(不使用shiro注解方式)
查看>>
android studio 报 out of memory错误
查看>>
HttpURLConnection学习
查看>>
创建UIButton按钮的注意事项
查看>>
Java中HashMap和TreeMap的区别深入理解
查看>>
WCF Web Services & iOS - Part 3
查看>>
js让输入inpu不是数字的时候自动删除内容
查看>>