2012-06-13 28 views
6

QML Görüntüsünü telefon belleğine nasıl kaydedebilirim ??QML görüntüsünü kaydetme

Ayrıca, görüntüyü kaydetme geçerliyse, görüntüye bir miktar metin eklemem gereken bir durum var (bunu şeffaf bir görüntümüz var [metinleri tutuyor] ve ikinci resmin üzerine koyabiliyoruz Böylece nihayet telefon belleğine kaydedebileceğimiz bir imajımız var.

cevap

7

Doğrudan Image'dan değil. QDeclarativeImage, pixmap, setPixmap ve pixmapChange yöntemlerine sahiptir, ancak bazı nedenlerden dolayı bildirilen bir özellik yoktur. Yani bunu kullanamazsınız qml. Ne yazık ki, C++ dan da kullanılamaz - özel bir calsss.

Yapabilecekleriniz pixmap'inize grafik öğeleri boyamak ve dosyaya kaydetmek.

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

Kayıt "capturer" bağlam değişkeni:

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

Ve QML kullanmak: Eğer birlikte QML düz yapabiliriz 5.4+ Qt ile

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

Teşekkürler sevgili, Çalışıyor :). Şimdi Qt'de 2 görüntüyü nasıl birleştireceğimi araştırıyorum, bana yardımcı olabilir misiniz? – Bayan

+0

2 'QQuickItem'ı birleştirme/birleştirme ve görüntüye nasıl kaydeder? –