Qml Item grabToImage 保存图像错误

Posted

技术标签:

【中文标题】Qml Item grabToImage 保存图像错误【英文标题】:Qml Item grabToImage save image error 【发布时间】:2018-06-15 09:55:05 【问题描述】:

我正在使用

Item.grabToImage()

但我收到以下错误。

QML ItemX: grabToImage: item has invalid dimensions

这是因为我使用了这样的高度和宽度属性:

width: 
    // return with * 0.4; based for some condition
    // for eg
    return parent.width * 0.4;


// and something similar with height

只有当我输入静态高度和宽度时,我才能使以下代码正常工作:

grabToImage(
    function(result)
    
        result.saveToFile("/path/project-name/tmp/something.png");
    
);

关于为什么以及如何解决这个问题的任何想法?

谢谢

【问题讨论】:

您是否考虑过……嗯……您的尺寸可能无效? 好吧,我假设因为我可以看到它,所以根据父宽度的宽度调整它的大小,甚至随着窗口缩放,该大小必须以某种方式有效。如果他们无效,渲染将是不可能的。不会吗? 有时候父项不是你想的那个项目,而是一个内部不可见的contentItem。为确定起见,请尝试在控制台中输出维度值。 好的,伙计。我会做。这是一个工作问题,所以它必须是星期一。到时候我会回复你的。 n 感谢您迄今为止的反馈 问题可能与您的父级和/或您的元素嵌套有关。我确实建议您准备干净的最小工作示例,对其进行测试,如果仍然拒绝按预期工作 - 请分享您的资源,以便我们为您提供帮助。 【参考方案1】:

我不是 100% 确定原因,但这是关于父级的动态宽度的问题。

在我编写的程序中,我已将图像的锚点设置在预览容器的左侧和右侧。

因此,当我尝试从覆盖图像的另一个项目获取图像捕获以剪切图像的较小部分时,它不允许我这样做。 我解决这个问题的方法是设置源图像的固定图像大小,然后将其锚定到预览部分的中心。

现在唯一的问题是,如果您缩放窗口,它不会变大。 我确信我可以实现主程序窗口的大小更改,然后设置图像的宽度(未测试)。

我要提到的最后一件事是,如果图像很小,那么从源图像的各个部分中剪切出来的图像将变得模糊且质量不佳。 我通过将“sourceSize.width”设置为一个非常大的图像来解决此问题,然后使用“scale”属性缩小图像以适合预览项。

【讨论】:

以上是关于Qml Item grabToImage 保存图像错误的主要内容,如果未能解决你的问题,请参考以下文章

QML如何绘制不同的grabToImage()

Qt:以预期的压缩格式保存图像

在 C++ 中保存 QML 图像

无法在 Loader QML 文件中保存 QML 对象

将具有多种状态的 QtQuick 项目保存到 .png 文件

如何在运行时生成的 QML 中加载图像(jpg)