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 转换后(圆形)

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