Qt 设置圆形头像例程问题



  • QImage resultImage(QSize(100,100),QImage::Format_ARGB32_Premultiplied);
    QImage head(":/images/Head.png");
    head.scaled(100,100);
    QImage head_mask(":/images/Head_Background_Mask.png");
    QPainter painter(&resultImage);
    painter.setCompositionMode(QPainter::CompositionMode_Source);
    painter.fillRect(resultImage.rect(), Qt::transparent);
    painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
    painter.drawImage(0, 0, head_mask);
    painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
    painter.drawImage(0, 0, head);
    painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
    painter.end();

    我看了一下帮助文档还是不太理解这个QPainter::CompositionMode_Source和QPainter::CompositionMode_Destination的概念,而且做出来的Demo刚好抠的是外面的边框而不是中间的圆0_1460601161253_dd28.png

    请问该怎么修改代码呢?

    自己也在试,但是不太明白这个的含义QPainter::CompositionMode,都没试出来想要的结果。想要的结果是,中间是圆形显示的,周边不显示。

    蒙版如下图:
    0_1460601237074_ID_USER_MASK.png



  • @学酥 额,自己写代码绘制效果啊~~~
    我喜欢用QLabel加个QSS画圆角,简单方便,也好修改和维护.



  • @taadis 那是圆角,我要的是整圆



  • 已经让美工作一张刚好相反的图像了。虽然解决了问题,但是还是有不明白的地方吧。



  • @学酥 一个正方形,4个圆角,不就是一个圆形了么?



  • @学酥 这么说让用户上传图片的时候程序都要自动处理成这么一张相反的图片咯



  • 正方形的label,把四个圆角半径调为正方形边长的一般,就得到了一个圆形


 

最近的回复

  • 纹理滤波

    在纹理映射的过程中,如果图元的大小不等于纹理的大小,OpenGL便会对纹理进行缩放以适应图元的尺寸。我们可以通过设置纹理滤镜来决定OpenGL对某个纹理采用的放大、缩小的算法

    滤镜 描述 GL_NEAREST 取最邻近像素 GL_LINEAR 线性内部插值 GL_NEAREST_MIPMAP_NEAREST 最近多贴图等级的最邻近像素 GL_NEAREST_MIPMAP_LINEAR 在最近多贴图等级的内部线性插值 GL_LINEAR_MIPMAP_NEAREST 在最近多贴图等级的外部线性插值 GL_LINEAR_MIPMAP_LINEAR 在最近多贴图等级的外部和内部线性插值

    阅读更多
  • @大黄老鼠 你的视频是挺诡异的

    阅读更多
  • @青山白云 和纹理映射的那个骰子一样,跑出来的骰子感觉不对

    阅读更多

关注我们

微博
QQ群











召唤蕾姆