gpt4 book ai didi

c++ - 在 QImage alpha channel 中制作多边形孔

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:05 24 4
gpt4 key购买 nike

我正在尝试在 QImage alpha channel 中制作多边形孔。我当前的实现使用已弃用的“alphaChannel”方法并且运行缓慢(因为它对每个图像像素使用 containPoint 而不是绘制多边形)。

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

QImage alpha = newImage.alphaChannel();
QPolygon hole(QVector<QPoint>::fromStdVector(hole_points));
for (int x = 0; x < image.width(); x++)
{
for (int y = 0; y < image.height(); y++)
{
if (hole.containsPoint(QPoint(x, y), Qt::OddEvenFill))
{
alpha.setPixel(x, y, 0);
}
}
}
newImage.setAlphaChannel(alpha);

return newImage;
}

我也尝试使用画家和适当的合成模式来实现它,但结果我在多边形边界上出现了白色伪影。

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;
}

这样做的正确方法是什么?

最佳答案

我认为你应该像这样启用抗锯齿:

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

关于c++ - 在 QImage alpha channel 中制作多边形孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267681/

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