C++ 在QImage alpha通道中制作多边形孔

C++ 在QImage alpha通道中制作多边形孔,c++,qt,C++,Qt,我正在尝试在QImage alpha通道中创建多边形孔。 我当前的实现使用不推荐的“alphaChannel”方法,并且工作速度很慢(因为它对每个图像像素使用containPoint,而不是绘制多边形) QImage生成带孔图像(常量QImage和图像,常量std::向量和孔点) { QImage newImage=image.convertToFormat(QImage::Format_ARGB32); QImage alpha=newImage.alphaChannel(); QPolygo

我正在尝试在QImage alpha通道中创建多边形孔。 我当前的实现使用不推荐的“alphaChannel”方法,并且工作速度很慢(因为它对每个图像像素使用containPoint,而不是绘制多边形)

QImage生成带孔图像(常量QImage和图像,常量std::向量和孔点)
{
QImage newImage=image.convertToFormat(QImage::Format_ARGB32);
QImage alpha=newImage.alphaChannel();
QPolygon孔(QVector::fromStdVector(孔点));
对于(int x=0;x
我还试图使用画师和适当的构图模式来实现它,但结果是在多边形边界上出现了白色瑕疵

QImage makeImageWithHole(const QImage & image, const std::vector<QPoint> & hole)
{
  QImage newImage = image.convertToFormat(QImage::Format_ARGB32);

  QPainter p(&newImage);
  p.setCompositionMode(QPainter::CompositionMode_SourceOut);
  p.setPen(QColor(255, 255, 255, 255));
  p.setBrush(QBrush(QColor(255, 255, 255, 255)));
  p.drawPolygon(hole.data(), hole.size());
  p.end();

  return newImage;
}
QImage makeImageWithHole(常量QImage&image,常量std::vector&hole)
{
QImage newImage=image.convertToFormat(QImage::Format_ARGB32);
QPainter p(和newImage);
p、 setCompositionMode(QPaint::CompositionMode_SourceOut);
p、 setPen(QColor(255、255、255、255));
p、 退刀(QBrush(QColor(255、255、255、255));
p、 drawPolygon(hole.data(),hole.size());
p、 end();
返回新图像;
}

正确的方法是什么?

我认为您应该像这样启用反校准:

QPainter p(&newImage);
p.setRenderHints(QPainter::Antialiasing);

我认为你应该像这样启用反Aliazing:

QPainter p(&newImage);
p.setRenderHints(QPainter::Antialiasing);