2012-06-13 15 views
6

Jak zapisać obraz QML w pamięci telefonu?zapisywanie obrazu QML

również jeśli zapisywanie obrazu miało zastosowanie, mam ten przypadek, że muszę dodać trochę tekstu do obrazu (możemy to sobie wyobrazić, ponieważ mamy przezroczysty obraz [który trzyma tekst] i umieścić go na drugim obrazie , więc w końcu mamy jeden obraz, który możemy zapisać w pamięci telefonu)

Odpowiedz

7

Nie bezpośrednio z Image. Metody QDeclarativeImage ma metody pixmap, i pixmapChange, ale z jakiegoś powodu nie zadeklarowano żadnej właściwości. Więc nie możesz użyć tego fom qml. Niestety nie można go również używać z C++ - jest to prywatna wersja calsss.

Co można zrobić, to pomalować element graficzny do swojej pixmapy i zapisać do pliku.

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"); 
} 

Rejestracja "Capturer" zmienny kontekst:

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

i używać go w swojej QML:

Rectangle { 
    // ... 
    Image { 
     id: img 
     source: "/path/to/your/source" 
    } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      capturer.save(img) 
     } 
    } 
} 
+0

dziękuję, dziękuję :). Teraz szukam, jak scalić 2 obrazy w Qt, czy możesz mi pomóc? – Bayan

+0

jak nakładać/scalać 2 'QQuickItem's i zapisywać do obrazu? –

Powiązane problemy