[Interest] QImage from ShaderEffectSource

manish sharma 83.manish at gmail.com
Sun Sep 14 10:56:09 CEST 2014


Thanks for reply Gunnar, I can safely use this technique now.

Regards,
Manish

On Sun, Sep 14, 2014 at 1:28 PM, Gunnar Sletta <gunnar at sletta.org> wrote:

> Yeah, it looks like this will work quite well :)
>
> Using either ShaderEffectSource or turning the item into a texture
> provider using Item::layer::enabled is the way to do this prior to Qt 5.4.
>
> cheers,
> Gunnar
> www.sletta.org
>
> On 13 Sep 2014, at 16:28, manish sharma <83.manish at gmail.com> wrote:
>
> > Hi,
> >
> > I found a way to get the QImage of an QQuickItem, I am aware of
> QQuickWindow::grabImage and QQuickItem::grabToImage will be available in
> Qt5.4. So far i am getting correct QImage and it seems to work quite well.
> I want to know what i am doing is correct.
> >
> > Flow:-
> > - create ShaderEffectSource
> > - on ShaderEffectSource::scheduledUpdateCompleted signal hook to
> afterRendering of window
> > - inside afterRendering get the
> ShaderEffectSource::textureProvider::texture and use glGetTexImage to get
> an QImage.
> >
> > Code:-
> > C++
> >     QuickWindow()
> >     {
> >         .....
> >         m_snapshotItem = root->findChild<QQuickItem*>("snapShotItem");
> >         connect (m_snapshotItem, SIGNAL(scheduledUpdateCompleted()),
> this, SLOT(takeSnapshot()));
> >      }
> >
> > private slots:
> >     void takeSnapshot()
> >     {
> >         connect(this, SIGNAL(afterRendering()), this, SLOT(getImage()),
> Qt::DirectConnection);
> >     }
> >
> >     void getImage()
> >     {
> >         qDebug() << "taking snapshot..!";
> >         disconnect(this, SIGNAL(afterRendering()), this,
> SLOT(getImage()));
> >         QSGTexture *texture =
> m_snapshotItem->textureProvider()->texture();
> >         texture->bind();
> >         GLint internalFormat;
> >         glGetTexLevelParameteriv(GL_TEXTURE_2D, 0,
> GL_TEXTURE_COMPONENTS, &internalFormat); // get internal format type of GL
> texture
> >         QImage img(texture->textureSize(),  QImage::Format_RGBX8888);
> >         glGetTexImage(GL_TEXTURE_2D, 0, internalFormat,
> GL_UNSIGNED_BYTE, img.bits());
> >         img.save("c:\\temp\\snapshot.bmp");
> >     }
> >
> > QML
> > Item {
> >     anchors.fill: parent
> >
> >     Rectangle {
> >         id: rect
> >         anchors.fill: parent
> >         color: "green"
> >     }
> >
> >     ShaderEffectSource {
> >         objectName: 'snapShotItem'
> >         anchors.fill: rect
> >         live: false
> >         recursive: false
> >         sourceItem: rect
> >     }
> > }
> >
> > Regards,
> > Manish
> >
> > _______________________________________________
> > Interest mailing list
> > Interest at qt-project.org
> > http://lists.qt-project.org/mailman/listinfo/interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20140914/e59a6d96/attachment.html>


More information about the Interest mailing list