自定义抓取物品的图像

Customizing image of grabbed item

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

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