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

2016-02-19 20:10 29 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

文章

  详细代码如下:

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);

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

 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));

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

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

来源:http://www.tulaoshi.com/n/20160219/1622920.html

延伸阅读
标签: Java JAVA基础
  Imaging_ToWeb.jsp <%@ page autoFlush="false"  import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*"% <%     String ImageStr = request.getParameter("ID_Text");     if(ImageStr==null || ImageStr.equals(""))     {    &nb...
GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用。当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。 坐标空间及其变换 在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据作用方法的不...
标签: 电脑入门
通常情况下,大家将大量BMP格式的图片转换为JPG格式的图片时,会使用Photshop、ACDSee等软件来完成。如果没有这些软件该怎么办呢?不用担心, Windows XP中就有一个简单的批量转换图片的功能。需要注意的是:这种方法只能将BMP格式转换为JPG格式。具体方法如下: 选中要转换的BMP图片,单击鼠标右键。在弹出的菜单中选择发送到→邮件接收者...
怎样在vc、delphi、vb等程序中使用mysql呢(mysql odbc驱动程序的使用) 我们经常会遇到这样问题,怎样在非web程序或asp程序中使用mysql数据库呢?对于这个问题有两个解决方案: 1.使用mysql提供的api函数库。 很多有名的mysql客户端工具就是这样实现的,大名鼎鼎的winmysql工具就是这样的。这在大部分的开发工具中都可以实现。比如...
在.net Framework的框架中有很多操作各种图形的函数,包括:点,线,面等等,构成的各种各样的丰富的图象。 在这里我主要是介绍在.Net Framework中GDI+下的TEXT(文本)的操作。首先以一个小小的程序开始: 建立一个Windows应用程序 在窗体上添加一个Button控件 和 一个PictureBox控件. 在Button控件的事件中添加,如下代码: SizeF textSize...

经验教程

239

收藏

77
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部