gpt4 book ai didi

c++ - Qt : Smooth a circular mask. 去除锯齿状边缘

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:38 24 4
gpt4 key购买 nike

我目前正在执行以下操作,以便在我的图像上放置一个圆形蒙版。结果只显示了我的图像的圆形区域。这工作正常但是图像往往有锯齿状的边缘(边框)。关于我如何做到这一点的任何建议。

最佳答案

从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:

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

关于c++ - Qt : Smooth a circular mask. 去除锯齿状边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com