[Interest] QImage from ShaderEffectSource

Gunnar Sletta gunnar at sletta.org
Sun Sep 14 09:58:53 CEST 2014


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




More information about the Interest mailing list