Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. How to get a screenshot in Android?
Forum Updated to NodeBB v4.3 + New Features

How to get a screenshot in Android?

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
29 Posts 3 Posters 3.4k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Mikeeeeee

    I use QQmlApplicationEngine

    KroMignonK Offline
    KroMignonK Offline
    KroMignon
    wrote on last edited by
    #5

    @mikeeeeee I would to it like this:

    QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow());
    if(!currentWindow)
        return;
    QScreen* screen = currentWindow->screen();
    if(!screen)
        return;
    QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry();
    auto pm = screen->grabWindow(0, screenGeometry.x(), screenGeometry.y(), screenGeometry.width(), screenGeometry.height());
    
    QByteArray bArray;
    QBuffer buffer(&bArray);
    buffer.open(QIODevice::WriteOnly);
    pm.save(&buffer, "PNG");
    
    
    1 Reply Last reply
    1
    • M Offline
      M Offline
      Mikeeeeee
      wrote on last edited by
      #6

      I get error:use of undeclared identifier 'fullScreen'

      KroMignonK 1 Reply Last reply
      0
      • M Mikeeeeee

        I get error:use of undeclared identifier 'fullScreen'

        KroMignonK Offline
        KroMignonK Offline
        KroMignon
        wrote on last edited by KroMignon
        #7
        This post is deleted!
        1 Reply Last reply
        0
        • M Offline
          M Offline
          Mikeeeeee
          wrote on last edited by
          #8

          This piece of code doesn't work either. I put in my code that converts QScreen to QByteArray. QByteArray is empty.

          QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow());
          //    if(!currentWindow)
          //        return;
               QScreen* screen = currentWindow->screen();
          
          1 Reply Last reply
          0
          • M Offline
            M Offline
            Mikeeeeee
            wrote on last edited by
            #9

            This all code

            QQuickWindow* currentWindow = qobject_cast<QQuickWindow*>(QGuiApplication::focusWindow());
            

            // if(!currentWindow)
            // return;
            QScreen* screen = currentWindow->screen();
            // if(!screen)
            // return;
            //QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry();
            /* QRect screenGeometry = fullScreen ? screen->geometry() : currentWindow->geometry();
            auto pm = screen->grabWindow(0, screenGeometry.x(), screenGeometry.y(), screenGeometry.width(), screenGeometry.height());

            QByteArray bArray;
            QBuffer buffer(&bArray);
            buffer.open(QIODevice::WriteOnly);
            pm.save(&buffer, "PNG");*/
            
            
            
            QImage myScreen;
            //QPixmap pic = QPixmap::grabWindow(QWidget::winId(),0,0,50,50);
            //qDebug()<<QWidget::winId();
            

            // QScreen *screen = QGuiApplication::primaryScreen();
            QPixmap pixamp;
            pixamp = screen->grabWindow(0);
            myScreen = pixamp.toImage();
            //myScreen = QPixmap::grabWindow();
            //myScreen = quickView->grabWindow();
            //myScreen.save("C:\Users\New Owner\Downloads\i.png");
            QByteArray bArray;
            QBuffer buffer(&bArray);
            buffer.open(QIODevice::WriteOnly);
            //myScreen.save(&buffer, "JPEG");
            //QString image("data:image/jpg;base64,");
            myScreen.save(&buffer, "PNG");
            QString image("data:image/png;base64,");
            image.append(QString::fromLatin1(bArray.toBase64().data()));
            qDebug()<<"screenShot:"<<image;
            return image;

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Mikeeeeee
              wrote on last edited by
              #10

              Maybe you can use it?

              foreach(QObject* obj, engine.rootObjects()) {
              QQuickWindow* window = qobject_cast<QQuickWindow*>(obj);
              if (window) {
              QImage image = window->grabWindow();
              qDebug() << image;
              }
              }

              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #11

                is the image valid then ?
                like
                qDebug() << image.isNull();
                says false ?

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  Mikeeeeee
                  wrote on last edited by Mikeeeeee
                  #12

                  qDebug()<<"screenShot:"<<image;
                  return:
                  "screenShot: "data:image/png;base64,""

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    Mikeeeeee
                    wrote on last edited by
                    #13

                    @mrjj said in How to get a screenshot in Android?:

                    qDebug() << image.isNull();

                    qDebug() <<"image.isNull() :" << image.isNull();
                    return:
                    image.isNull() : false

                    mrjjM 1 Reply Last reply
                    0
                    • M Mikeeeeee

                      @mrjj said in How to get a screenshot in Android?:

                      qDebug() << image.isNull();

                      qDebug() <<"image.isNull() :" << image.isNull();
                      return:
                      image.isNull() : false

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #14

                      @mikeeeeee
                      Ok, that means its does grab something :)

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        Mikeeeeee
                        wrote on last edited by
                        #15

                        But how to get a picture out of it?

                        mrjjM 1 Reply Last reply
                        0
                        • M Mikeeeeee

                          But how to get a picture out of it?

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #16

                          @mikeeeeee
                          Cant you just save it ?
                          https://doc.qt.io/qt-5/qimage.html#save

                          1 Reply Last reply
                          0
                          • M Offline
                            M Offline
                            Mikeeeeee
                            wrote on last edited by
                            #17

                            We've made a mistake. I immediately ask the text QString image("data:image/png;base64,"); And so, pictures of the there is no. Need another code.

                            mrjjM 1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              Mikeeeeee
                              wrote on last edited by
                              #18

                              qDebug() <<"image.isNull() :" << image.isNull()<<"screen->size() :"<<screen->size();
                              return
                              image.isNull() : false screen->size() : QSize(360, 640)

                              1 Reply Last reply
                              0
                              • M Mikeeeeee

                                We've made a mistake. I immediately ask the text QString image("data:image/png;base64,"); And so, pictures of the there is no. Need another code.

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by
                                #19

                                @mikeeeeee
                                Im really not sure what you are saying. :)
                                That code work for others it seemed
                                https://stackoverflow.com/questions/21697185/how-to-take-screenshot-of-qml-application-without-qquickview/38501975

                                What Qt version are you using?

                                1 Reply Last reply
                                0
                                • M Offline
                                  M Offline
                                  Mikeeeeee
                                  wrote on last edited by
                                  #20

                                  Could the screen be incorrectly processed?

                                  1 Reply Last reply
                                  0
                                  • M Offline
                                    M Offline
                                    Mikeeeeee
                                    wrote on last edited by
                                    #21

                                    I use Qt 5.13

                                    1 Reply Last reply
                                    0
                                    • M Offline
                                      M Offline
                                      Mikeeeeee
                                      wrote on last edited by
                                      #22

                                      my initial code worked in Windows, but it doesn't work in Android.

                                      mrjjM 1 Reply Last reply
                                      0
                                      • M Mikeeeeee

                                        my initial code worked in Windows, but it doesn't work in Android.

                                        mrjjM Offline
                                        mrjjM Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #23

                                        @mikeeeeee
                                        Hi
                                        Not all android devices can take shot of QML. Need support in openGL driver.

                                        Hmm. your Qt version seems new enough.
                                        if you google "qt qml grabwindow bug" you can see there been quite some issues but
                                        it should work with new Qt versions.

                                        How type of android device are you using ? I mena is it old or kinda new ?

                                        1 Reply Last reply
                                        0
                                        • M Offline
                                          M Offline
                                          Mikeeeeee
                                          wrote on last edited by
                                          #24

                                          I use Android 5,6,9

                                          mrjjM 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved