自定义抓取项目的图像

问题描述 投票:0回答:1

我有一个鼠标区域,单击后将其捕获并保存到图像中。

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

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

qt qml qtquick2 qt-quick
1个回答
1
投票

确定,最好的方法是将不透明度设置为保存的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);
        });
    }
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.