VC6使用GDI+

来源(博客频道 - CSDN.NET)

From: http://blog.csdn.net/whatday/article/details/7559880

VC6使用GDI+

标签: gdi+imagenull图形mfcdelete

2012-05-12 11:18 2228人阅读

GDI+图形函数,一个组在.net环境下提供的以取代GDI图形函数的类,将来会逐渐取代GDI图形函数.

如果在vc6.0中使用gdi+图形函数,那么请按以下步骤操作:

1.下载GDIPlus.rar(下载地址:http://download.csdn.net/detail/whatday/4296203)将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.

2新建一个工程(以winsdk框架为例mfc也相同)

将以下代码加入StdAfx.h头文件中

//加入的头文件
#include <comdef.h>//初始化一下com口

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
//结束


3在程序初始化部分加入

//gdi+用到的两个变量
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
//装载gdi+
GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);


4在程序退出部分前加入

//卸载gdi+
GdiplusShutdown(m_pGdiToken);


5在Project->stting->Link->Object/libary中加入gdiplus.lib

好了经过上面几步我们就可以在程序中使用GDI+了,先试一下吧!

显示一个透明字符串

Graphics mygraphics(hdc);//创建一个Graphics对象
SolidBrush brush(Color(100,0,0,255));//创建一个笔刷 第一项是透明度 后三项是RGB值
FontFamily fontFamily(L"Latha");选择一种字体
Font font(&fontFamily,1,FontStyleRegular,UnitInch);
PointF pointF(5,5);

mygraphics.DrawString(L"Hello Word!",-1,&font,pointF,&brush);


或显示一幅jpg图像

CString path="001.jpg";
BSTR str=path.AllocSysString();
Image image(str);
CDC* hdc=GetDC();
Graphics imgraphics(hdc->m_hDC);
imgraphics.DrawImage(&image,0,0);


注意要把001.jpg考到工程目录下

/////////////////////////////////////////////////////////////////////////////////////////

图片类型互转(png,bmp,jpg,gif)

示例:png->bmp

函数声明

[cpp]

INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid);

// Get the CLSID of the PNG encoder.


[cpp]

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
}


[cpp]

INT main() {
	// Initialize GDI+.
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

	CLSID encoderClsid;
	Status stat;
	Image* image = new Image(L"test.png");

	// Get the CLSID of the PNG encoder.
	GetEncoderClsid(L"image/bmp", &encoderClsid); //或者image/png image/jpeg等

	stat = image->Save(L"test2.bmp", &encoderClsid, NULL);

	if(stat == Ok)
		printf("test2.png was saved successfully\n");
	else
		printf("Failure: stat = %d\n", stat);

	delete image;
	GdiplusShutdown(gdiplusToken);
	return 0;
}

Link: http://www.asm32.net/article_details.aspx?id=7038


浏览次数 0 发布时间 2016-09-15 02:29:44 从属分类 VC++ 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1