把Bitmap中的图片保存至内存块
来源:互联网 发布:adobe系列软件下载 编辑:程序博客网 时间:2024/04/29 18:51
在VC编程中,通常会对已有图片进行缩放,然后,需要把缩放后的图片(gdiplus::Bitmap)以二进制形式保存至内存中,再进行其它处理,如:将内存中二进制内容保存至数据库或传递给其它处理模块。
有两种方式把Bitmap对象中图片保存至内存:
1. 先将Bitmap对象中的图片以指定格式保存至本地文件,再从本地文件读取至内存块
代码如下:
BYTE* Convert(Bitmap *pBitmap){ // 默认保存为png格式 CLSID clsid; GetImageCLSID(_T("image/png"), &clsid); // 临时文件 CString csTempPath = _T("C:\\temp.png"); // 先保存再读取至内存 pBitmap->Save(csTempPath, &clsid); CFile fileRead(csTempPath, CFile::modeRead); int iLength = fileRead.GetLength(); BYTE *pbyteBuf = new BYTE[iLength]; fileRead.Read(pbyteBuf, iLength); fileRead.Close(); // 删除临时文件 DeleteFile(csTempPath); return pbyteBuf;}// 获取图片的clsidint CGenerateThumbnail::GetImageCLSID(const WCHAR* format, CLSID* pCLSID) { UINT num = 0; UINT size = 0; ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) { // 编码信息不可用 return FALSE; } //分配内存 pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) { // 分配失败 return FALSE; } //获得系统中可用的编码方式的所有信息 GetImageEncoders(num, size, pImageCodecInfo); //在可用编码信息中查找format格式是否被支持 for(UINT i = 0; i < num; ++i) { //MimeType:编码方式的具体描述 if(wcscmp(pImageCodecInfo[i].MimeType, format) == 0) { *pCLSID = pImageCodecInfo[i].Clsid; free(pImageCodecInfo); return TRUE; } } free(pImageCodecInfo); return FALSE; }
2. 使用类COleStreamFile进行转换,把Bitmap中内容读入到stream中,再从stream中读取到内存块
代码如下:
BYTE* Convert(Bitmap *pBitmap){ // 默认保存为png格式 CLSID clsid; GetImageCLSID(_T("image/png"), &clsid); // 创建stream对象 COleStreamFile *pOleStream = new COleStreamFile; if (!pOleStream->CreateMemoryStream()) { return FALSE; } // 先保存至流,在读取至内存块 pBitmap->Save(pOleStream->GetStream(), &clsid); BYTE *pbyteBuf = new BYTE[pOleStream->GetLength()]; oleStream->Read(pbyteBuf, (UINT)pOleStream->GetLength()); delete pOleStream; return pbyteBuf;}
总结:
就转换速度而言,方式1的转换时间反而比方式2快些,这个主要是方式2在CreateMemoryStream时慢些;我估计,如果转换较大的文件的话,方式2的转换时间会更短。
方式1使用了本地文件中转,这中方式比较依赖硬盘,容易出问题;而方式2只使用内存,出问题的可能性较小。
因此,还是比较推荐方式2。
- 把Bitmap中的图片保存至内存块
- Android 图片Bitmap保存到内存卡
- Android中把Bitmap图片保存到文件中
- 内存溢出应对:把图片固定大小赋值给bitmap
- Bitmap(图片)保存至本地和使用
- BitMap保存图片
- bitMap保存图片
- flex 保存bitmap图片
- 保存 BITmap 图片 代码
- 图片流,bitmap保存
- 保存bitmap 图片路径
- android保存Bitmap图片到指定文件夹中的方法
- MFC内存中的图片怎么保存?
- 把view保存成bitmap,保存bitmap到sd卡
- 如何把Excel中的单元格等对象保存成图片
- 利用Bitmap实现图片放大效果(项目中的drawable路径图片,内存卡中的图片)
- 把bitmap保存到手机相册
- 387_把Bitmap保存到本地
- 一篇顿悟的文章
- JSP验证码的编写
- 黑马程序员_SQL视频学习之练习
- 线段树 hdu1166 (敌兵布阵)
- 人生没有彩排,生活只有精彩
- 把Bitmap中的图片保存至内存块
- Goodle MAP使用
- 海量数据处理学习网站
- HTML DOM selectedIndex 属性
- 多trac的安装和配置
- 设置JPanel背景图片
- SQL2005同步复制
- Reflector插件集合下载地址
- 出栈序列统计