Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT:掩蔽图像-建议?_Qt_Image Masking - Fatal编程技术网

QT:掩蔽图像-建议?

QT:掩蔽图像-建议?,qt,image-masking,Qt,Image Masking,我不知道我在这里使用的术语是否正确。然而,这就是我正在努力实现的目标,我想就如何实现这一目标提出一些建议。我希望有一个边界可见的圆。现在是最难的部分,我甚至不知道如何开始。我想以这样一种方式操纵圆,即圆的边界是可见的,而圆心是不可见的(即它几乎有一个孔,可以显示它下面到底放了什么)然后,我想在圆的下面放置另一个图像,这样,只有圆的透明部分下面的图像部分被显示,圆的透明边界之外的部分变得不可见。关于如何实现这一目标的任何建议。看来谷歌搜索对我没什么帮助。你可能想看看这个网站 简言之,您可以绘制第一

我不知道我在这里使用的术语是否正确。然而,这就是我正在努力实现的目标,我想就如何实现这一目标提出一些建议。我希望有一个边界可见的圆。现在是最难的部分,我甚至不知道如何开始。我想以这样一种方式操纵圆,即圆的边界是可见的,而圆心是不可见的(即它几乎有一个孔,可以显示它下面到底放了什么)然后,我想在圆的下面放置另一个图像,这样,只有圆的透明部分下面的图像部分被显示,圆的透明边界之外的部分变得不可见。关于如何实现这一目标的任何建议。看来谷歌搜索对我没什么帮助。

你可能想看看这个网站

简言之,您可以绘制第一幅图像,然后使用其中一种构图模式在顶部绘制第二幅图像(或者反过来)。确保在使用图像之前将其转换为ARGB32。 要使圆的内部透明,可以相应地调整Alpha通道

下面是一个使用合成模式的小示例:

QPainter p(&imageCircle);
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
p.drawImage(image);
p.end()

在这里您可以找到的Qt文档。

我建议使用另一种方法来解开图像的圆形区域。可以指定剪辑区域-需要执行绘制的区域。例如:

[..]
QPainter painter(this);
// Sample circular area.
QRegion r(QRect(100, 100, 200, 200), QRegion::Ellipse);
painter.setClipRegion(r);
[..]
painter.drawImage(0, 0, image);
[..]
这将仅绘制半径为200的圆内的图像部分。所有剩余的像素都将被隐藏。 您可以处理鼠标移动事件,将此“圆”像放大镜一样移动到图像上

更新

下面是生成带有圆形遮罩的图像并将其插入标签的示例代码:

QPixmap target(500, 500); // the size may vary
QPixmap source("image.png");

QPainter painter(&target);
QRegion r(QRect(100, 100, 200, 200), QRegion::Ellipse);
painter.setClipRegion(r);
painter.drawPixmap(0, 0, source);

QLabel l;
l.setPixmap(target);
l.show();

我尝试了以下QImage circ;
QImage图片;pic.load(:/qt/images/pic.bmp”);循环加载(:/qt/images/circt.png”);QPainter pˆp、 setCompositionMode(QPaint::CompositionMode_SourceOver);p、 绘图图像(&pic);p、 end()但是drawimage方法不起作用。我该怎么画图像?这个主意听起来很有趣。我试过了,但没有看到图像。图像是应该以某种形式绘制还是我应该将其添加到布局中?@MistyD,这是我应该问你的问题:)你需要在哪里绘制这些东西?请解释一下你尝试了什么。提到的代码应该在QWidget::paintEvent()中使用。我想将img添加到QLabel中,因此我正在执行以下操作`QImage*pic=new QImage();pic->load(“:/qt/images/no.bmp”);QImage*rslt=新的QImage();QPainter*油漆工=新的QPainter(rslt);QRegion r(QRect(10,10,20,20),QRegion::椭圆);油漆工->设置Clipregion(r);画师->绘图图像(0,0,*pic);ui.label->setPixmap(QPixmap::fromImage(*rslt));`但是我在QLabel图片中什么也看不到你能告诉我为什么我看不到图片吗?