C++矩形圖片轉換爲圓形圖片

C++將方形的頭像轉換爲圓形的頭像
好久沒有更新博客了,正好最近有空,整理一下用到的一些知識點,方便以後要再次用到,同時也給需要的人做個參考,歡迎指正!
將方形的頭像轉換成圓形的頭像在很多地方都會用到,網上也有很多的例子,嘗試了很多種方法,但是效果都不怎麼好,有的轉換之後會出現比較明顯的鋸齒,明顯不能符合要求,最終是採用GDI+實現,效果比較明顯;廢話不多說,直接貼代碼:

bool GetCircleImage(CString strSource, CString strTarget)
{
    Image image(strSource);
    Bitmap b(image.GetWidth(), image.GetHeight());
    Graphics g(&b);
    g.SetSmoothingMode(Gdiplus::SmoothingModeHighQuality);
    GraphicsPath p(FillModeAlternate);
    p.AddEllipse(0, 0, image.GetWidth(), image.GetHeight());
    g.FillPath(&TextureBrush(&image), &p);

    //獲取編碼器的CLSID [class id] 
    UINT num = 0;                     //圖像編碼器的數量 
    UINT size = 0;                    //圖像編碼器數組的字節數 
    CLSID encoderClsid;
    ImageCodecInfo* pICI = NULL;

    GetImageEncodersSize(&num, &size);//獲得系統編碼器的數量和大小 
    if (size == 0) return false;//失敗 

    pICI = (ImageCodecInfo*)(malloc(size)); //編碼器 
    if (pICI == NULL) return false;//失敗 

    GetImageEncoders(num, size, pICI);    //獲取編碼器信息 
    for (UINT j = 0; j < num; ++j)
    {
        if (wcscmp(pICI[j].MimeType, L"image/png") == 0)//jpeg bmp gif tiff png 
        {
            encoderClsid = pICI[j].Clsid;
        }
    }
    free(pICI);
    Status s = b.Save(strTarget, &encoderClsid);//只有png才能保存下來透明信息
    return true;
}

下面是轉換前後的對比圖:
C++將方形的頭像轉換爲圓形的頭像
在這裏插入圖片描述
圖1 轉換前(方形)

C++將方形的頭像轉換爲圓形的頭像
在這裏插入圖片描述
圖2 轉換後(圓形)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章