MFC内存中的图片怎么保存?
来源:互联网 发布:sql数据库怎么打开 编辑:程序博客网 时间:2024/04/29 21:19
一,添加gdi相关文件
1,从网络上下载gdi头文件和库文件http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip
2,解压之后将将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中;
3,将以下代码加入StdAfx.h头文件中:
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h "
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib ")
#endif
4,将gdiplus.dll考到debug和release目录下
二,在程序中加载库
1,在C*APP头文件中添加两个变量
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
2,在C*APP文件的InitInstance函数中加入初始化GDI+的函数:
GdiplusStartup(&m_pGdiToken, &m_gdiplusStartupInput, NULL);
3,在C*APP文件中添加ExitInstance()虚函数
在ExitInstance()虚函数中添加
GdiplusShutdown(m_pGdiToken);
三使用GDI+ GDI+的使用很方便代码如下
CDC* pdc = GetDC();
CDC MemDC; //首先定义一个显示设备对象
MemDC.CreateCompatibleDC(pdc);
CBitmap MemBitmap;//定义一个位图对象
MemBitmap.CreateCompatibleBitmap(pdc,nWidth,nHeight);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里用的是白色作为背景
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
CString filename;//名字 eg:xxx.jpg /xxx.bmp。。。。。
这里用MemDC绘图//
MemDC.move(0,0);MemDC.lineto(100,100);
......................................
USES_CONVERSION; //将cstring转化为const wchar*
WCHAR* pBuf = T2W((LPCTSTR)filename);
//这里就是将内存中的绘图转化成图片了
Bitmap bm((HBITMAP)MemBitmap, NULL);//定义bitmap
CLSID pngClsid;
GetEncoderClsid(L"image/jpeg", &pngClsid);
bm.Save(pBuf, &pngClsid, NULL);
MemDC.DeleteDC();
其中GetEncoderClsid(const WCHAR* format, CLSID* pClsid)代码如下
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num= 0;
UINT size= 0;
ImageCodecInfo* pImageCodecInfo= NULL;
GetImageEncodersSize(&num, &size);
if(size== 0)
{
return -1;
}
pImageCodecInfo= (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo== NULL)
{
return -1;
}
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j=0; j< num; ++j)
{
if(wcscmp(pImageCodecInfo[j].MimeType, format)== 0)
{
*pClsid= pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
该函数使用方法很方便,如下面的代码就分别获得5中图像编码器的CLSID
CLSID encoderClsid
GetEncoderClsid(L"image/png", &encoderClsid); //png
GetEncoderClsid(L"image/bmp", &encoderClsid);
GetEncoderClsid(L"image/gif", &encoderClsid);
GetEncoderClsid(L"image/jpeg", &encoderClsid);
GetEncoderClsid(L"image/tiff", &encoderClsid);
- MFC内存中的图片怎么保存?
- 把Bitmap中的图片保存至内存块
- word里面图片怎么保存
- visio怎么保存为图片?
- MFC保存窗口为图片
- 怎么自定义MFC程序的保存文件名称?
- scope中的图怎么保存
- 内存位图保存成图片
- MFC 中的内存诊断
- 把MFC程序保存为图片 vc ++
- 把MFC程序保存为图片 vc ++
- MFC OPENCV 加载与保存图片
- Delphi保存网页中的图片
- 如何保存Word中的图片
- MFC 为按键设置图片怎么不行
- MFC中的图象保存一般有三种方法:
- MFC中的内存对齐设置
- 怎么识别图片中的日文
- 基于 JUnit 使用 Feed4JUnit 实现数据与代码分离的测试
- java算法:树与二叉树
- iOS 5 Programming Cookbook章节列表
- 使用Spring WS 2.0开发基于SOAP的web service
- vc6 source control 不能显示
- MFC内存中的图片怎么保存?
- js打印jsp页面的表单
- java算法:树遍历
- 卡路里和运动关系!
- New Blogger
- java算法:递归二叉树算法
- 匈牙利命名法
- 十五. Sql server count函数
- 无配置文件使用log4j