Qt 非圆角图片裁剪为圆角图片

作者 : admin 本文共1029个字,预计阅读时间需要3分钟 发布时间: 2024-06-14 共1人阅读

将Qt非圆角图片裁剪为圆角图片,步骤如下:

        1、按照原始图片尺寸定义一张透明的新图形

        2、使用画家工具在新图形上绘制一个圆角矩形线路

        3、绘制图片

        4、使用圆角矩形切割图片边角

Qt 非圆角图片裁剪为圆角图片插图

封装成函数如下:

        

QPixmap Widget::getRoundedPixmap(const QPixmap srcPixmap, const int radius)
{
    // 目标图片尺寸
    QSize desSize = srcPixmap.size();

    // 新建一个目标大小的画布Qpixmap
    QPixmap desPixMap(desSize);
    // 填充透明色作为背景
    desPixMap.fill(Qt::transparent);

    //以QPixmap 为绘画背景进行画笔绘制
    QPainter painter(&desPixMap);
    painter.setRenderHints(QPainter::Antialiasing); //抗锯齿
    painter.setRenderHints(QPainter::SmoothPixmapTransform); //平滑像素图变换


    QPainterPath path;//绘制路径
    //绘制圆角矩形,其中最后两个参数值的范围为(0-99),就是圆角的px值
    path.addRoundedRect(0, 0, desSize.width(), desSize.height(), radius, radius);

    // 将绘制的圆角矩形路径中内容进行裁剪
    painter.setClipPath(path);

    //将图片绘制到desPixmap中,IgnoreAspectRatio忽视图片比例
    painter.drawPixmap(0, 0, desSize.width(), desSize.height(), srcPixmap.scaled(desSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation));

    painter.setClipping(false); // 关闭裁剪

    return desPixMap;
}

使用案例:

// 原始的图片
QPixmap originImg = QPixmap(":/111.png");

QPixmap destImg = getRoundedPixmap(originImg,16);

ui->label->setPixmap(destImg);

Qt 非圆角图片裁剪为圆角图片插图(1)

本站无任何商业行为
个人在线分享 » Qt 非圆角图片裁剪为圆角图片
E-->