7

QML画像を電話のメモリに保存するにはどうすればよいですか?

また、画像の保存が該当する場合は、画像にテキストを追加する必要がある場合があります([テキストを保持する]透明な画像があり、2番目の画像の上に置くと想像できます。最後に電話のメモリに保存できる画像が1つあります)

4

2 に答える 2

7

Image直接からではありません。、およびメソッドQDeclarativeImageがありますが、何らかの理由でプロパティが宣言されていません。したがって、qmlからは使用できません。残念ながら、C++からも使用できません。これはプライベートな計算です。pixmapsetPixmappixmapChange

できることは、グラフィックアイテムをピックスマップにペイントしてファイルに保存することです。

class Capturer : public QObject
{
    Q_OBJECT
public:
    explicit Capturer(QObject *parent = 0);
    Q_INVOKABLE void save(QDeclarativeItem *obj);
};

void Capturer::save(QDeclarativeItem *item)
{
    QPixmap pix(item->width(), item->height());
    QPainter painter(&pix);
    QStyleOptionGraphicsItem option;
    item->paint(&painter, &option, NULL);
    pix.save("/path/to/output.png");
}

「capturer」コンテキスト変数を登録します。

int main()
{
    // ...
    Capturer capturer;
    QmlApplicationViewer viewer;
    viewer.rootContext()->setContextProperty("capturer", &capturer);
    // ...
}

そしてそれをあなたのqmlで使用してください:

Rectangle {
    // ...
    Image {
        id: img
        source: "/path/to/your/source"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            capturer.save(img)
        }
    }
}
于 2012-06-13T16:24:16.160 に答える
7

Qt 5.4+を使用すると、次のコマンドを使用してQmlから直接実行できます 。grabToImage

于 2015-02-03T11:47:43.607 に答える