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. Cannot safe image on android with camera
Qt 6.11 is out! See what's new in the release blog

Cannot safe image on android with camera

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
13 Posts 4 Posters 2.7k 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.
  • sierdzioS Offline
    sierdzioS Offline
    sierdzio
    Moderators
    wrote on last edited by
    #2

    @sandro4912 said in Cannot safe image on android with camera:

    qrc:/

    QRC storage is read-only. Choose a different path.

    App data location, cache location and temp locations are writable even if you do not get any storage permissions from your user.

    (Z(:^

    1 Reply Last reply
    2
    • S Offline
      S Offline
      sandro4912
      wrote on last edited by
      #3

      stupid question. How can I change to a different path? What would be a valid path?

      jsulmJ 1 Reply Last reply
      0
      • S sandro4912

        stupid question. How can I change to a different path? What would be a valid path?

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #4

        @sandro4912 See https://doc.qt.io/qt-5/qstandardpaths.html using it you can get the paths @sierdzio already mentioned

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        S 1 Reply Last reply
        2
        • jsulmJ jsulm

          @sandro4912 See https://doc.qt.io/qt-5/qstandardpaths.html using it you can get the paths @sierdzio already mentioned

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

          @jsulm So I have to make a C++ class with QStandardPaths or is it available directly in QML?

          jsulmJ 1 Reply Last reply
          0
          • S sandro4912

            @jsulm So I have to make a C++ class with QStandardPaths or is it available directly in QML?

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #6

            @sandro4912 There is something in Qt Labs: https://doc.qt.io/qt-5/qml-qt-labs-platform-standardpaths.html

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            1
            • S Offline
              S Offline
              sandro4912
              wrote on last edited by
              #7

              I tryed it with the path but still no images. show up. Atleast the error does not appear anymore.

              I changed the path here.

              delegate: Image {
                          height: 100
                          //source: path
                          source: Labs.StandardPaths.writableLocation(Labs.StandardPaths.ApplicationsLocation)
                          fillMode: Image.PreserveAspectFit
                      }
              

              Full code:

              import QtQuick 2.14
              import QtQuick.Controls 2.14
              import QtMultimedia 5.14
              import Qt.labs.platform 1.1 as Labs
              
              ApplicationWindow {
                  visible: true
              
                  id: root
              
                  width: 1024
                  height: 600
              
              
              
              Rectangle {
                  width: parent.width
                  height: parent.height
              
                  color: "black"
              
                  VideoOutput {
                      anchors.fill: parent
                      source: camera
                  }
              
                  Camera {
                      id: camera
                  }
              
                  ListModel {
                      id: imagePaths
                  }
              
                  ListView {
                      id: listView
              
                      anchors.left: parent.left
                      anchors.right: parent.right
                      anchors.bottom: parent.bottom
                      anchors.bottomMargin: 10
              
                      height: 100
              
                      orientation: ListView.Horizontal
                      spacing: 10
              
                      model: imagePaths
              
                      delegate: Image {
                          height: 100
                          //source: path
                          source: Labs.StandardPaths.writableLocation(Labs.StandardPaths.ApplicationsLocation)
                          fillMode: Image.PreserveAspectFit
                      }
              
                      Rectangle {
                          anchors.fill: parent
                          anchors.topMargin: -10
              
                          color: "black"
                          opacity: 0.5
                      }
                  }
              
                  Image {
                      id: image
                      anchors.fill: parent
                  }
              
                  Connections {
                      target: camera.imageCapture
              
                      onImageSaved: {
                          imagePaths.append({"path": path})
                          listView.positionViewAtEnd();
                      }
                  }
              
                  Column {
                      id: buttons
              
                      anchors.top: parent.top
                      anchors.right: parent.right
                      anchors.margins: 10
              
                      spacing: 10
              
                      Button {
                          id: shotButton
              
                          text: "Take Photo"
                          onClicked: {
                              camera.imageCapture.capture();
                          }
                      }
              
                      Button {
                          id: playButton
              
                          text: "Play Sequence"
                          onClicked: {
                              parent.parent.startPlayback();
                          }
                      }
              
                      Button {
                          id: clearButton
              
                          text: "ClearSequence"
                          onClicked: {
                              imagePaths.clear()
                          }
                      }
                  }
              
                  property int _imageIndex: -1
              
                  function startPlayback()
                  {
                      root.state = "playing"
                      setImageIndex(0);
                      playTimer.start();
                  }
              
                  function setImageIndex(i)
                  {
                      _imageIndex = i;
              
                      if(_imageIndex >= 0 && _imageIndex < imagePaths.count) {
                          image.source = imagePaths.get(_imageIndex).path;
                      }
                      else {
                          image.source = "";
                      }
                  }
              
                  Timer {
                      id: playTimer
              
                      interval: 200
                      repeat: false
              
                      onTriggered: {
                          if (_imageIndex + 1 < imagePaths.count) {
                              setImageIndex(_imageIndex + 1);
                              playTimer.start();
                          }
                          else {
                              setImageIndex(-1);
                              root.state = "";
                          }
                      }
                  }
              
                  states: [
                      State {
                          name: "playing"
                          PropertyChanges {
                              target: buttons
                              opacity: 0
                          }
                          PropertyChanges {
                              target: listView
                              opacity: 0
                          }
                      }
                  ]
              
                  transitions: [
                      Transition {
                          PropertyAnimation { properties: "opacity"; duration: 200; }
                      }
                  ]
              }
              
              }
              
              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #8

                Hi,

                Did you check that the folder exist ?
                The path returned by QStandardPaths will be valid but you have to create some of these folders on first use.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                1
                • S Offline
                  S Offline
                  sandro4912
                  wrote on last edited by
                  #9

                  What do you mean by that I have to create the standard folder?

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    Check if the folder exist and if not well create it before creating the image file.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    1
                    • S Offline
                      S Offline
                      sandro4912
                      wrote on last edited by
                      #11

                      how could I achieve that in the code above?

                      1 Reply Last reply
                      0
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        Create the folder ? I would do that in the C++ part on startup using QDir.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        1
                        • S Offline
                          S Offline
                          sandro4912
                          wrote on last edited by
                          #13

                          I think the path should already exist since it is the ApplicationsLocation.

                          I tryed this:

                              Camera {
                                  id: camera
                              }
                              ListModel {
                                  id: imagePaths
                              }
                          
                          ```
                          ListView {
                              id: listView
                          
                              //...
                          
                              model: imagePaths
                          
                              delegate: Image {
                                  height: 100
                                  source: path
                                  fillMode: Image.PreserveAspectFit
                              }
                          
                              Rectangle {
                                  anchors.fill: parent
                                  anchors.topMargin: -10
                          
                                  color: "black"
                                  opacity: 0.5
                              }
                          }
                          
                          
                              ```
                          Image {
                                  id: image
                                  anchors.fill: parent
                              }
                          
                              Connections {
                                  target: camera.imageCapture
                          
                                  onImageSaved: {
                                      imagePaths.append({"path": Labs.StandardPaths.writableLocation(Labs.StandardPaths.ApplicationsLocation)})
                                      listView.positionViewAtEnd();
                                  }
                              }
                          

                          So my idea was when camera takes the picture i append in the model imagePaths the ApplicationsLocation Path.

                          Then when the delegate is used in the view it should load the Image from path.

                          If I try this it sayes QJSValue is not convertible to QDir

                          So what is wrong here?

                          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