VC中使用GDI+在内存转换图片类型

八零后的奋斗

八零后的奋斗

2016-02-19 20:10

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享VC中使用GDI+在内存转换图片类型教程,希望对大家能有一点小小的帮助。

VC中使用GDI+在内存转换图片类型

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

文章

  详细代码如下:

BOOL MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage, CString strType)
{
 int iBmpSize = cbfBmp.GetLength();
 HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize);
 if (hMemBmp == NULL) return FALSE;
 IStream* pStmBmp = NULL;
 CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmBmp);
 if (pStmBmp == NULL)
 {
  GlobalFree(hMemBmp);
  return FALSE;
 }
 BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);
 cbfBmp.SeekToBegin();
 cbfBmp.Read(pbyBmp, iBmpSize);

 Image* imImage = NULL;
 imImage = Image::FromStream(pStmBmp, FALSE);
 if (imImage == NULL)
 {
  GlobalUnlock(hMemBmp);
  GlobalFree(hMemBmp);
  return FALSE;
 }
 USES_CONVERSION;
 CLSID clImageClsid;
 GetImageCLSID(A2W("image/"+strType.GetBuffer(0)), &clImageClsid);

 HGLOBAL hMemImage = GlobalAlloc(GMEM_MOVEABLE, 0);
 if (hMemImage == NULL)
 {
  pStmBmp-Release();
  GlobalUnlock(hMemBmp);
  GlobalFree(hMemBmp);
  if (imImage != NULL) delete imImage;
  return FALSE;
 } 
 IStream* pStmImage = NULL;
 CreateStreamOnHGlobal(hMemImage, TRUE, &pStmImage);
 if (pStmImage == NULL)
 {
  pStmBmp-Release();
  GlobalUnlock(hMemBmp);
  GlobalFree(hMemBmp);
  GlobalFree(hMemImage);
  if (imImage != NULL) delete imImage
   return FALSE;
 }
 imImage-Save(pStmImage, &clJpgClsid);
 if (pStmImage == NULL)
 {
  pStmBmp-Release();
  pStmImageRelease();
  GlobalUnlock(hMemBmp);
  GlobalFree(hMemBmp);
  GlobalFree(hMemImage;
  if (imImage != NULL) delete imImage;
  return FALSE;
 }
 LARGE_INTEGER liBegin = {0};
 pStmImage-Seek(liBegin, STREAM_SEEK_SET, NULL);
 BYTE* pbyImage = (BYTE *)GlobalLock(hMemImage);
 cbfImage.SeekToBegin();
 cbfImage.Write(pbyImage, GlobalSize(hMemImage));

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

 if (imImage != NULL) delete imImage;
 pStmBmp-Release();
 pStmImage-Release();
 GlobalUnlock(hMemBmp);
 GlobalUnlock(hMemImage);
 GlobalFree(hMemBmp);
 GlobalFree(hMemImage);
 return TRUE;
}

展开更多 50%)
分享

猜你喜欢

VC中使用GDI+在内存转换图片类型

编程语言 网络编程
VC中使用GDI+在内存转换图片类型

VC中使用Gdi+合并jpg图片

编程语言 网络编程
VC中使用Gdi+合并jpg图片

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在vc6.0中使用GDI+图形函数

编程语言 网络编程
在vc6.0中使用GDI+图形函数

VC采用GDI+合成JPEG图片的方法

编程语言 网络编程
VC采用GDI+合成JPEG图片的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

基于VC.NET的GDI+图像处理

编程语言 网络编程
基于VC.NET的GDI+图像处理

VC常用数据类型使用转换

编程语言 网络编程
VC常用数据类型使用转换

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

vc开发html编程

vc开发html编程

vc的编译参数优化

vc的编译参数优化
下拉加载更多内容 ↓