Сохранение изображения QML
Как я могу сохранить QML Image в память телефона?
также, если сохранение изображения было применимо, у меня есть этот случай, в котором мне нужно добавить текст к изображению (мы можем представить его как прозрачное изображение [которое содержит текст] и поместить его поверх второго изображения, так что, наконец, мы есть одно изображение, которое мы можем сохранить в памяти телефона)
2 ответа
Не из Image
непосредственно. QDeclarativeImage
имеет pixmap
, setPixmap
а также pixmapChange
методы, но по какой-то причине нет объявленного свойства. Таким образом, вы не можете использовать его из qml. К сожалению, он также не может быть использован из C++ - это частные вызовы.
Что вы можете сделать, это нарисовать графический элемент в свой растровое изображение и сохранить его в файл.
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)
}
}
}
С Qt 5.4+ вы можете сделать это прямо из вашего Qml с помощью: grabToImage