自定义抓取项目的图像



我有一个鼠标区域,点击后我会抓取并保存到图像中。

MouseArea {
id: mouseArea
objectName: "testMouseArea"
width: 64;
height: 64
onPressed: tile.grabToImage(function (result) {
result.saveToFile("D:/ouput.png")
});
Rectangle {
id: tile
anchors.fill: parent
color: "blue"
}
}

在保存之前,我想改变鼠标区域抓取图像的不透明度。

我添加了

result.image.opacity = 0.5

在保存之前,但这没有帮助。输出文件具有相同的不透明度(完全没有效果(。

好的,最好的方法是将不透明度设置为保存的Item,然后抓取图像。如果出于某种原因,您想对图像做更多的处理,以便对QImage进行全部处理。您可以使用适当的方法创建自定义C++项,可能是单例或常规QML项:

bool ImageProcess::saveWithOpacity(const QImage &input, const QString &path, double opacity)
{
QImage image(input.size(), QImage::Format_ARGB32_Premultiplied);
image.fill(Qt::transparent);
QPainter p(&image);
p.setOpacity(opacity);
p.drawImage(0, 0, input);
p.end();
return image.save(path);
} 

然后你可以在QML代码中使用它:

MouseArea {
id: area
...
onClicked: {
area.grabToImage(function (result) {
imgProcess.saveWithOpacity(result.image, "/path/to/file/img.png", 0.5);
});
}
...
}

最新更新