不但是抄袭,而且还抄袭了很多人的(《大话西游》瞎子:“我不只偷看你一个人,所有人我都偷看过”),但发现大家都在抄,^_^,也不知谁才是原作者(原作者看到后麻烦通告一下);抄袭之后又更改了一下(妄自修改比抄袭的罪还大),以利于读者更快看懂怎么用它(言下之意,如果你想正式使用它,应该封装成函数和类,我这里有意删除掉函数和类这些枝叶,为的就是更容易看懂GDI+的调用流程)。
gdiplus.h等头文件、lib文件 和 dll文件 需要自己去下载,注意gdiplus.dll的版本,有些gdiplus.dll中竟然找不到GdiplusStartup。
// VC++6.0编译运行通过
#include
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include "C:/GDIPlus/Includes/gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "C://GDIPlus//Lib//gdiplus.lib")
#include
int main( void )
{
HDC hdc = GetWindowDC( GetDesktopWindow() ); // 获得桌面DC
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); // 初始化GDI+
{ // 显示一行字符
Graphics graphics( hdc );
FontFamily fontFamily( L"隶书" );
Font font( &fontFamily, 24, FontStyleRegular, UnitPixel );
PointF pointF( 30.0f, 10.0f );
SolidBrush solidBrush( Color(255,0,0,255) ); // 第一个255是alpha值
graphics.DrawString( L"Gdi+应用,抄袭的", -1, &font, pointF, &solidBrush );
}
{
Image image( L"D://boy3.jpg" );
// 显示一个jpg图像
Point destPoints[3] = { Point(0,0), Point(image.GetWidth(),0), Point(0,image.GetHeight()) };
Graphics graphics( hdc );
graphics.DrawImage( &image, destPoints, 3 );
// 并把它保存为bmp格式
bool _GetImageEncoderCLSID( CLSID& clsid, const wchar_t* format=L"image/bmp" );
CLSID clsid;
_GetImageEncoderCLSID( clsid );
image.Save( L"D://boy3.bmp", &clsid, 0 );
}
GdiplusShutdown(gdiplusToken); // 卸载GDI+
return 0;
}
bool _GetImageEncoderCLSID( CLSID& clsid, const wchar_t* format=L"image/bmp" )
{
UINT num=0, size=0;
GetImageEncodersSize(&num, &size);
ImageCodecInfo* pImageCodecInfo = (ImageCodecInfo*)operator new( size, std::nothrow );
if(pImageCodecInfo == 0) return false;
GetImageEncoders( num, size, pImageCodecInfo );
for( UINT i = 0; i {
if( wcscmp(pImageCodecInfo[i].MimeType,format) == 0 )
{
clsid = pImageCodecInfo[i].Clsid;
operator delete( pImageCodecInfo );
return true;
}
}
operator delete( pImageCodecInfo );
return false;
}