How to save an image from QML Image element?
-
wait for QQuickRenderControl
-
I tried to use the Canvas, and also I could not save.
I'll try again tomorrow .. -
Image loading and saving via Canvas:
@import QtQuick 2.2
import QtQuick.Window 2.1Window {
width: imgLoader.sourceSize.width
height: imgLoader.sourceSize.height
visible: true
property string loadUrl: "file://tmp/image.png"
property string saveUrl: "/tmp/i2.png"Canvas { id: root anchors.fill: parent onPaint: { var ctx = getContext("2d") ctx.drawImage(imgLoader, 0, 0) } } MouseArea { anchors.fill: parent onClicked: { if (root.save(saveUrl)) { console.log("save succeeded") } else { console.log("save failed") } } } Image { id: imgLoader visible: false source: loadUrl }
}@
Note that the parameter to Canvas::save() is a filename, not a URL. It fails when "file://tmp/i2.png" is used.
-
jeremy_k thanks it works great.
-
Hi
does the above code really draw an image in the given path?
For me the file gets created but nothing in it... i have given save url as "/storage/sdcard0/a1.png".Can u help me ?
Thanks in Advance,,
-
Hi
I decided to solve this a bit differently. I created a new QML type (c++ class) that takes in image url (local or remote) and spits out local url. In case of beginning http:// or https:// class checks if image is already downloaded from the remote server and in that case spits the local url right out w/o wasting the precious mobile data bandwidth.And then there a QML component that fills out the Image type source property when the local url is returned from my so called "Caching class". If anybody's interest I can strip it out of my project and put it up to github with decent comments.
-
Hi DonRico
If u can post that code that would be an great help for me...can u?Thanks
-
Ok, I'll try to find some spare time to separate it and put it.
-
Ok, the exmaple project is available in https://github.com/DonRico/QT-Image-Caching . There might be some issues since I've written QT for 2mos for now but it should give you the general idea.
-
Caching can also be handled with a "QQuickImageProvider":https://qt-project.org/doc/qt-5/qquickimageprovider.htmlQQuickImageProvider.
After defining and register a provider, image urls can be written as "image://ProviderName/path/to/image".
The same concept exists for Qt 4 in the form of QDeclarativeImageProvider.
-
This post is deleted!