作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在执行以下操作,以便在我的图像上放置一个圆形蒙版。结果只显示了我的图像的圆形区域。这工作正常但是图像往往有锯齿状的边缘(边框)。关于我如何做到这一点的任何建议。
最佳答案
从QPixmap的文档中可以了解到:
The hasAlpha(), setMask() and mask() functions are legacy and should not be used. They are potentially very slow.
除了速度慢之外,它们在不支持抗锯齿的二进制掩码 (QBitmap
) 上运行,每个像素要么完全不透明,要么完全透明。这会导致锯齿状边缘。
解决方案是直接操作像素图的 alpha channel 。但是,您不能在像素图上使用绘图操作。相反,您需要在 QImage before 通过 QPixmap::fromImage()
转换它之前进行绘制。使用这种方法,您操作的 alpha channel 有 8 位(而不是 1),允许抗锯齿。在边缘,您会发现完全不透明和完全透明之间的平滑过渡。
所以要在原始 QImage 中绘制 alpha:
img.convertToFormat(QImage::Format_ARGB32);
img
上的QPainter
初始化为绘画设备DestinationIn
合成模式;见 http://qt-project.org/doc/qt-4.8/qpainter.html#CompositionMode-enum drawEllipse
操作。关于c++ - Qt : Smooth a circular mask. 去除锯齿状边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335247/
我是一名优秀的程序员,十分优秀!