GDI+添加图片水印

(2010-08-02 09:46:05)
转载
标签: 

杂谈

分类: GDI+
bool GetCodecClsid(LPCTSTR lpstrFormat, CLSID &clsid)
{


    UINT nNum = 0, nSize = 0;
    Gdiplus::GetImageEncodersSize(&nNum, &nSize) == Gdiplus::Ok;

    Gdiplus::ImageCodecInfo *pInfo = (Gdiplus::ImageCodecInfo *)malloc(nSize);


    if(Gdiplus::GetImageEncoders(nNum, nSize, pInfo) != Gdiplus::Ok)
    {
        free(pInfo);
    }

    LPCWSTR lpstr = lpstrFormat;

    for(int nIndex = 0; nIndex < nNum; ++nIndex)
    {
        if(wcscmp(pInfo[nIndex].MimeType, lpstr) == 0)
        {
            clsid = pInfo[nIndex].Clsid;
            return true;
        }
    }

    return false;
};


void DrawWatermark()
{
    USES_CONVERSION;
    int nPicWidth = 0;
    int nPicHeight = 0;
    ULONG_PTR m_gdiplusToken;
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    if ( Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL) != Gdiplus::Ok )
    {
        return ;
    }




    Gdiplus::Bitmap oOldBitMap(A2W("Winter.jpg"));
     printf("%d\n",oOldBitMap.GetHeight());

//新画布
    Gdiplus::Bitmap bitmap(oOldBitMap.GetWidth (), oOldBitMap.GetHeight ());
    bitmap.SetResolution (oOldBitMap.GetHorizontalResolution (), oOldBitMap.GetVerticalResolution ());
    
    Gdiplus::Graphics graphics(&bitmap);
    graphics.SetSmoothingMode (SmoothingModeAntiAlias);
    graphics.SetTextRenderingHint (TextRenderingHintAntiAlias);


    Gdiplus::Bitmap oWatermark(A2W("paipai_logo_80.png"));
   //Image oWatermark(A2W("4.jpg"));
   // Gdiplus::Bitmap oWatermark(A2W("paipai_logo.png"));
    printf("%d",oWatermark.GetHeight());
    int nLocX = 0;
    int nLocY = 0;
    int nmode = oWatermark.GetLastStatus ();
    
    // 
    graphics.DrawImage(&oOldBitMap, 0, 0, oOldBitMap.GetWidth (), oOldBitMap.GetHeight ()); 
    
    
    int nStatus = graphics.DrawImage (&oWatermark,Gdiplus::Rect(0, 0,253, 53), 0, 0, 253, 53, Gdiplus::UnitPixel);
    graphics.DrawImage (&oWatermark,253,60, 0, 0, 253, 53, Gdiplus::UnitPixel);
    graphics.DrawImage (&oWatermark,253,100, 0, 0, 253, 53, Gdiplus::UnitPixel);

//        int nStatus = graphics.DrawImage (&oWatermark,0,0);
    //oOldBitMap.Save(A2W("Winter.jpg"))
    CLSID pngclsid = {0};
    GetCodecClsid(_T("image/jpeg"), pngclsid);

//    oOldBitMap.Save(A2W("Winter1.png"), &pngclsid);
 //  oWatermark.Save(A2W("logo.png"), &pngclsid);

    delete &oOldBitMap;

    if( PathFileExists( A2W("Winter.jpg") ))
    {
        if(GetFileAttributes(A2W("Winter.jpg")) & (~FILE_ATTRIBUTE_NORMAL))
        {
            SetFileAttributes(A2W("Winter.jpg"), FILE_ATTRIBUTE_NORMAL);
        }
    if( !DeleteFile(A2W("Winter.jpg")) )
        perror( "Could not delete Winter.jpg" );
    else
        printf( "Deleted 'Winter.jpg'\n" );
    }
    bitmap.Save (A2W("Winter.jpg"), &pngclsid);

};

你可能感兴趣的:(windows,系统开发,C++)