转VC6.0中gdiPlus的使用以及一个bmp转jpg的小例子[bobob原创]
来源:互联网 发布:电商erp系统 对接淘宝 编辑:程序博客网 时间:2024/05/24 00:12
VC6.0中gdiPlus的使用以及一个小例子
1.GDIPlus需要下载并安装sdk开发包
2.在tool,option,direction,include files下设置头文件路径.../MICROSOFT SDK/INCLUDE,在tool,option,direction,libaray files下设置lib路径.../MICROSOFT SDK/SDK8/LIB,在project, setting, link, object/modules libaray里面输入gdiplus.lib.
注意,路径一定要放在最上层,还有,一定要是绝对路径,上面的...需要自己补充完整
3.新建一个单文档工程XXX,给XXXApp类添加成员变量
protected:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
在XXXApp::InitInstance()里面添加:GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
重载XXXApp::ExitInstance(),在里面添加:GdiplusShutdown(m_gdiplusToken);
注意,以上修改过的文件前面要加上以下语句:
#include <GdiPlus.h>
using namespace Gdiplus;
上面的事情做完,你就可以在程序中使用gdiplus了,以下是一个把bmp转换成jpg的小例子:
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
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; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
void BMP2JPG(CString strBMPFile,CString strJPGFile)
{
CLSID encoderClsid;
WCHAR strGuid[39];
if(GetEncoderClsid(L"image/jpeg", &encoderClsid) >= 0)
StringFromGUID2(encoderClsid, strGuid, 39);
Image image(strBMPFile.AllocSysString());
image.Save(strJPGFile.AllocSysString(),&encoderClsid,NULL);
}
当然,上面的例子所在文件前面也必须加上
#include <GdiPlus.h>
using namespace Gdiplus;
注意:要做初始化工作 以后任何问题都要考虑一下初始化
protected:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
在XXXApp::InitInstance()里面添加:GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
重载XXXApp::ExitInstance(),在里面添加:GdiplusShutdown(m_gdiplusToken);
我在做类似的工程时候 因为没有在Initlnstance()里加入:GdiplusStartup(……)相应的初始化工作导致报了一个Access Violate的错误 耽误了挺多时间,以后切记。
1.GDIPlus需要下载并安装sdk开发包
2.在tool,option,direction,include files下设置头文件路径.../MICROSOFT SDK/INCLUDE,在tool,option,direction,libaray files下设置lib路径.../MICROSOFT SDK/SDK8/LIB,在project, setting, link, object/modules libaray里面输入gdiplus.lib.
注意,路径一定要放在最上层,还有,一定要是绝对路径,上面的...需要自己补充完整
3.新建一个单文档工程XXX,给XXXApp类添加成员变量
protected:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
在XXXApp::InitInstance()里面添加:GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
重载XXXApp::ExitInstance(),在里面添加:GdiplusShutdown(m_gdiplusToken);
注意,以上修改过的文件前面要加上以下语句:
#include <GdiPlus.h>
using namespace Gdiplus;
上面的事情做完,你就可以在程序中使用gdiplus了,以下是一个把bmp转换成jpg的小例子:
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
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; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
void BMP2JPG(CString strBMPFile,CString strJPGFile)
{
CLSID encoderClsid;
WCHAR strGuid[39];
if(GetEncoderClsid(L"image/jpeg", &encoderClsid) >= 0)
StringFromGUID2(encoderClsid, strGuid, 39);
Image image(strBMPFile.AllocSysString());
image.Save(strJPGFile.AllocSysString(),&encoderClsid,NULL);
}
当然,上面的例子所在文件前面也必须加上
#include <GdiPlus.h>
using namespace Gdiplus;
注意:要做初始化工作 以后任何问题都要考虑一下初始化
protected:
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
在XXXApp::InitInstance()里面添加:GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL);
重载XXXApp::ExitInstance(),在里面添加:GdiplusShutdown(m_gdiplusToken);
我在做类似的工程时候 因为没有在Initlnstance()里加入:GdiplusStartup(……)相应的初始化工作导致报了一个Access Violate的错误 耽误了挺多时间,以后切记。
- 转VC6.0中gdiPlus的使用以及一个bmp转jpg的小例子[bobob原创]
- VC6.0中gdiPlus的使用以及一个bmp转jpg的小例子
- VC6.0中gdiPlus的使用以及一个小例子
- VC6.0中gdiPlus的使用以及一个小例子
- VC6.0中gdiPlus的使用以及一个小例子
- (转) VC6.0中GdiPlus的使用以及一个小例子 - jiket - 网易博客
- 【转】在VC6中使用 GdiPlus
- VC6 中使用GDIPlus
- jpeglib 的使用心得 YUV BMP JPG 的转码
- wince中显示BMP、JPG、Gif以及PNG的方法
- wince中显示BMP、JPG、Gif以及PNG的方法
- 在 VC6 中使用 GdiPlus
- 在 VC6 中使用 GdiPlus
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- Java Web开发学习
- 解决HTML文件图标显示不正常的问题
- 原创声明!!!!!!!!!!!!!!!!!!!!!!
- php笔记
- PopupMenuExample
- 转VC6.0中gdiPlus的使用以及一个bmp转jpg的小例子[bobob原创]
- 关于serialVersionUID的解释
- [enough]
- 匈牙利命名规范
- 必须掌握的八个cmd命令
- .NET程序员应该知道些什么
- 测试术语
- 太阳不在天空,心在流泪。
- VB6字符串连接操作效率