GDI+ example(抄袭的)/作者:周星星

不但是抄袭,而且还抄袭了很多人的(《大话西游》瞎子:“我不只偷看你一个人,所有人我都偷看过”),但发现大家都在抄,^_^,也不知谁才是原作者(原作者看到后麻烦通告一下);抄袭之后又更改了一下(妄自修改比抄袭的罪还大),以利于读者更快看懂怎么用它(言下之意,如果你想正式使用它,应该封装成函数和类,我这里有意删除掉函数和类这些枝叶,为的就是更容易看懂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;
}

你可能感兴趣的:(VC)