Qt:把圆形面具弄光滑。去除锯齿状边缘

2024-04-16 06:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做的是在我的图像上放置一个圆形面具。结果我的图像只有圆形区域显示。这个工作良好,但图像往往有锯齿边缘(边界)。有什么建议吗。在


Tags: 图像区域圆形建议边缘边界面具锯齿
1条回答
网友
1楼 · 发布于 2024-04-16 06:47:12

从QPixmap的文档中可以了解到:

The hasAlpha(), setMask() and mask() functions are legacy and should not be used. They are potentially very slow.

除了速度慢之外,它们还使用不支持抗锯齿的二进制掩码(QBitmap),每个像素要么完全不透明,要么完全透明。这会导致锯齿状边缘。在

解决方案是直接操纵pixmap的alpha通道。但是,不能在pixmap上使用绘图操作。相反,您需要在通过QPixmap::fromImage()转换它之前绘制QImage。 使用此方法,您操作的alpha通道有8位(而不是1),这允许抗锯齿。在边缘处,您将发现完全不透明和完全透明之间的平滑过渡。在

所以要在原始的QImage中绘制alpha:

  1. 确保它实际上有一个alpha通道,例如通过调用img.convertToFormat(QImage::Format_ARGB32);
  2. QPainter上的QPainter初始化为绘制设备
  3. 在painter上设置DestinationIn合成模式;请参见http://qt-project.org/doc/qt-4.8/qpainter.html#CompositionMode-enum
  4. 使用特定字母的白色笔刷执行drawEllipse操作。在

相关问题 更多 >