Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. uchar* QImage::bits() returned '\0'...(nullptr)
Forum Updated to NodeBB v4.3 + New Features

uchar* QImage::bits() returned '\0'...(nullptr)

Scheduled Pinned Locked Moved General and Desktop
17 Posts 4 Posters 2.1k Views 1 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.
  • S Offline
    S Offline
    shtomik
    wrote on last edited by shtomik
    #1

    Hi to all guys,

    Today, I'm trying to represent QImage as AVFrame(ffmpeg API).

    // localImage is RGB32 QImage that fetching in func
    QImage *img = new QImage(localImage);
    if (!img->isNull()) {
        uchar* bits = img->bits();
    }
    

    But bits() func always return null, my uchar* pointer in debug always 0 or '\0'... What's wrong?

    Thanks so much for your attention!

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

      Hi
      What is localImage ? ( Type )

      S 1 Reply Last reply
      1
      • mrjjM mrjj

        Hi
        What is localImage ? ( Type )

        S Offline
        S Offline
        shtomik
        wrote on last edited by
        #3

        @mrjj Hi, thanks for your reply :) Format_RGB32

        mrjjM 1 Reply Last reply
        1
        • S shtomik

          @mrjj Hi, thanks for your reply :) Format_RGB32

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

          @shtomik
          So its from
          QImage QOpenGLWidget::grabFramebuffer() ?
          Did you check what
          http://doc.qt.io/qt-5/qimage.html#isNull
          says ?
          Also, do you do something like
          https://stackoverflow.com/questions/13088749/efficient-conversion-of-avframe-to-qimage

          S 1 Reply Last reply
          0
          • mrjjM mrjj

            @shtomik
            So its from
            QImage QOpenGLWidget::grabFramebuffer() ?
            Did you check what
            http://doc.qt.io/qt-5/qimage.html#isNull
            says ?
            Also, do you do something like
            https://stackoverflow.com/questions/13088749/efficient-conversion-of-avframe-to-qimage

            S Offline
            S Offline
            shtomik
            wrote on last edited by shtomik
            #5

            @mrjj

            So its from
            QImage QOpenGLWidget::grabFramebuffer() ?

            Yes.

            Did you check what
            http://doc.qt.io/qt-5/qimage.html#isNull
            says ?

            Yea, what's wrong? In debug mode I saw that image is 1280x720 and with data...

            Also, do you do something like
            https://stackoverflow.com/questions/13088749/efficient-conversion-of-avframe-to-qimage

            I read it, but I want to "convert" from QImage to AVFrame, not to QImage... I had a code for "converting" without data copy, but QImage::bits() func returned not correct pointer? If need to list code for converting, I can paste it, but is it correct way to think that my trouble really in bits() func? Thanks!

            mrjjM 1 Reply Last reply
            0
            • S shtomik

              @mrjj

              So its from
              QImage QOpenGLWidget::grabFramebuffer() ?

              Yes.

              Did you check what
              http://doc.qt.io/qt-5/qimage.html#isNull
              says ?

              Yea, what's wrong? In debug mode I saw that image is 1280x720 and with data...

              Also, do you do something like
              https://stackoverflow.com/questions/13088749/efficient-conversion-of-avframe-to-qimage

              I read it, but I want to "convert" from QImage to AVFrame, not to QImage... I had a code for "converting" without data copy, but QImage::bits() func returned not correct pointer? If need to list code for converting, I can paste it, but is it correct way to think that my trouble really in bits() func? Thanks!

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

              @shtomik
              Hi
              ok so localImage is valid ?
              Normally its due to invalid image it returns null.
              But if in Format_RGB32 it should work.
              localImage bits() also returns null ?

              S 2 Replies Last reply
              0
              • mrjjM mrjj

                @shtomik
                Hi
                ok so localImage is valid ?
                Normally its due to invalid image it returns null.
                But if in Format_RGB32 it should work.
                localImage bits() also returns null ?

                S Offline
                S Offline
                shtomik
                wrote on last edited by
                #7

                @mrjj

                ok so localImage is valid ?
                localImage bits() also returns null ?

                localImage and img I can to QImage::save(QStrings path ...), and it's work... So I think valid... 1 minute, please, I check it in debug. Thanks again ;)

                1 Reply Last reply
                1
                • mrjjM mrjj

                  @shtomik
                  Hi
                  ok so localImage is valid ?
                  Normally its due to invalid image it returns null.
                  But if in Format_RGB32 it should work.
                  localImage bits() also returns null ?

                  S Offline
                  S Offline
                  shtomik
                  wrote on last edited by shtomik
                  #8

                  @mrjj
                  Yes, is valid, I can save pic and not null... All is good, but what's wrong?(

                  Now I'm using:

                  QImage *img = new QImage(ui->oGLArea->grabFramebuffer());
                  

                  without localImage...

                  mrjjM 1 Reply Last reply
                  0
                  • S shtomik

                    @mrjj
                    Yes, is valid, I can save pic and not null... All is good, but what's wrong?(

                    Now I'm using:

                    QImage *img = new QImage(ui->oGLArea->grabFramebuffer());
                    

                    without localImage...

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

                    So
                    After copying QImage to QImage, bits() fail ?
                    QImage::QImage(const QImage &image)
                    makes a shallow copy so i wonder if something goes out of scope ?
                    If you do
                    QImage img = ui->oGLArea->grabFramebuffer();
                    is bits() still NULL ?
                    Im wondering of the implicit sharing is doing something.

                    S 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      So
                      After copying QImage to QImage, bits() fail ?
                      QImage::QImage(const QImage &image)
                      makes a shallow copy so i wonder if something goes out of scope ?
                      If you do
                      QImage img = ui->oGLArea->grabFramebuffer();
                      is bits() still NULL ?
                      Im wondering of the implicit sharing is doing something.

                      S Offline
                      S Offline
                      shtomik
                      wrote on last edited by
                      #10

                      @mrjj
                      I'm trying QImage::copy() too, but it's fail...

                      If you do
                      QImage img = ui->oGLArea->grabFramebuffer();
                      is bits() still NULL ?

                      Yes.

                      mrjjM 1 Reply Last reply
                      0
                      • S shtomik

                        @mrjj
                        I'm trying QImage::copy() too, but it's fail...

                        If you do
                        QImage img = ui->oGLArea->grabFramebuffer();
                        is bits() still NULL ?

                        Yes.

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

                        @shtomik
                        Hmm. that is really odd if u can save them as working files.
                        Im out of guesses.
                        Give it some hours , others will come online and might have a good idea.

                        S 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @shtomik
                          Hmm. that is really odd if u can save them as working files.
                          Im out of guesses.
                          Give it some hours , others will come online and might have a good idea.

                          S Offline
                          S Offline
                          shtomik
                          wrote on last edited by
                          #12

                          @mrjj
                          thank you so much for your time and replies! I'm here... :)

                          1 Reply Last reply
                          0
                          • VRoninV Offline
                            VRoninV Offline
                            VRonin
                            wrote on last edited by VRonin
                            #13

                            what does qDebug() << QByteArray(reinterpret_cast<const char*>(img->constBits()),img->bytesPerLine()).size(); print out (if it doesn't crash)?

                            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                            ~Napoleon Bonaparte

                            On a crusade to banish setIndexWidget() from the holy land of Qt

                            S 1 Reply Last reply
                            1
                            • mranger90M Offline
                              mranger90M Offline
                              mranger90
                              wrote on last edited by
                              #14

                              Are you sure its null ? By that I mean, what happens if you test

                                if ( bits == nullptr ) {
                                 }
                              else {
                                   qDebug () << *bits << *(bits + 1) << *(bits + 2)
                               }
                              

                              I ask because your description of whats shown in the debuggers sounds like the
                              debugger is looking at the first part of the pixel, which could be 0.

                              S 2 Replies Last reply
                              3
                              • VRoninV VRonin

                                what does qDebug() << QByteArray(reinterpret_cast<const char*>(img->constBits()),img->bytesPerLine()).size(); print out (if it doesn't crash)?

                                S Offline
                                S Offline
                                shtomik
                                wrote on last edited by
                                #15

                                @VRonin
                                It doesn't crash o_O
                                5120 - output

                                1 Reply Last reply
                                0
                                • mranger90M mranger90

                                  Are you sure its null ? By that I mean, what happens if you test

                                    if ( bits == nullptr ) {
                                     }
                                  else {
                                       qDebug () << *bits << *(bits + 1) << *(bits + 2)
                                   }
                                  

                                  I ask because your description of whats shown in the debuggers sounds like the
                                  debugger is looking at the first part of the pixel, which could be 0.

                                  S Offline
                                  S Offline
                                  shtomik
                                  wrote on last edited by
                                  #16

                                  @mranger90
                                  You are right! If first pixel not BLACK, debuger shows buffer of bits, but if first char - 0, empty buffer...

                                  1 Reply Last reply
                                  1
                                  • mranger90M mranger90

                                    Are you sure its null ? By that I mean, what happens if you test

                                      if ( bits == nullptr ) {
                                       }
                                    else {
                                         qDebug () << *bits << *(bits + 1) << *(bits + 2)
                                     }
                                    

                                    I ask because your description of whats shown in the debuggers sounds like the
                                    debugger is looking at the first part of the pixel, which could be 0.

                                    S Offline
                                    S Offline
                                    shtomik
                                    wrote on last edited by shtomik
                                    #17

                                    @mranger90 @VRonin @mrjj

                                    Thank you guys... I found a couple of mistakes in my code, but the main mistake was in trust to the debugger, sometimes it was 0x0 or 0 or '\0' value for pointer to uchar that was 0.

                                    1 Reply Last reply
                                    1

                                    • Login

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