Galerie möglich?

Startseite Foren Deutsches LiveCode-Forum Galerie möglich?

Schlagwörter: 

Ansicht von 19 Antwort-Themen
  • Autor
    Beiträge
    • #14092
      albin0
      Teilnehmer

        Hallo Zusammen,

        ich muss jetzt nochmal eine Grundsatzfrage stellen.

        Kann ich mit LC eine Image Galerie für Android bauen? Die Galerie App sollte alle Bilder aus einem Verzeichnis zb. /storage/emulated/0/DCIM/camera laden und anzeigen. Je nachdem welche Bilder in dem Ordner sind, ändert sich auch der Inhalt der Galerie. Man kann dann Bilder auswählen und die Dateinamen der ausgewählten Bilder zusammen mit einem Namen in ein Textfile speichern. Die App bleibt dabei offline und soll innerhalb einer Kiosk Anwendung als einzige App laufen.

        Ich hatte ja schon einen Anfang mit mobilePickPhoto "library" gemacht, leider war diese Vorgehensweise nicht zielführend, da hier die Möglichkeit bestünde in der nativen Galerie von Android Bilder zu bearbeiten oder gar zu löschen.

        Ich habe zwischenzeitlich mal versucht mit diesem Beispiell zu arbeiten. Leider scheint dieses Beispiel nicht für mein Vorhaben geeignet.

        Hier mal noch ein Bild wie ich mir das Ganze vorstelle.

        Entwurf Bilder Galerie

        Grüße Tobias

      • #14094
        MichaelS
        Teilnehmer

          Hallo Tobias,
          in den Lessons von Livecode (Livecode.com) gibt es einen Kurs der sich um das
          Handling von Photos auf dem Smartphone dreht. Dort wird die App Photos, und noch zwei
          weitere Beispielapps, erstellt. Alle Bilder werden in einer SQLite Datenbank gespeichert.
          Schau dir das mal an, vielleicht kommst du deiner Idee damit näher.

          Gruß
          Michael

        • #14095
          albin0
          Teilnehmer

            Guten Morgen,

            Danke Michael, dass hatte ich noch nicht gesehen, schau ich mir an.

            ?‍♂️

          • #14107
            albin0
            Teilnehmer

              Hallo,

              leider bleibt mit diesem Artikelmeine grundsätzliche Frage unbeantwortet.

              Wenn ich das richtig verstehe kann ich:
              1. Bilder direkt in den Stack importieren kann.
              (nutzt hier nichts, da sich die Bilder in der Quelle ändern.
              2. Bilder referenzieren kann.
              (das könnte evtl. klappen, allerdings müsste ich die Bilder dann immer gleich benennen, damit das Imageobjekt auch immer ein Bild enthält.)
              3. Bei Desktop apps absolute Pfade angeben kann.
              (fällt auch aus, da es sich ja um eine Android App handelt.)
              4. Bilder von einer URL referenzieren kann.
              (auch das geht nicht da die App offline ist.)
              5. & 6. Behandeln dann lc paint und den Export von Bildern.

              Nochmal die Frage, ist es möglich mit LC eine Referenz auf einen gesamten Ordner in Android zu legen. Alle Bilder dieses Ordners werden dann bspw in einem grid angezeigt.

              Mit put kann ich mir ja bspw auch die Dateinamen aller files in einem bestimmten Ordner in einem Textfeld anzeigen lassen. Funktioniert dies auch unter Android? Wenn das geht, kann es ja nicht so schwer sein, die Bilder zu formatieren und in einer Tabelle oder einem grid auch anzuzeigen.

              Ich weiß immer noch nicht ob das überhaupt umsetzbar ist.

              Danke vorweg Grüße

              Tobias

            • #14108
              Klaus Major
              Administrator

                Hallo Tobias,

                Nochmal die Frage, ist es möglich mit LC eine Referenz auf einen gesamten Ordner in Android zu legen. Alle Bilder dieses Ordners werden dann bspw in einem grid angezeigt.

                das ist leider unter Android und iOS nicht möglich wegen “Sandboxing”!
                Wir haben nur Zugriff auf die Ordner, die uns LC mit seinen diversen specialfolderpath() Codes zur Verfügung stellt.

                Gruß

                Klaus

              • #14112
                albin0
                Teilnehmer

                  Hallo Klaus,

                  Danke für deine Antwort.

                  Also unter Android wären das “resources”, “engine”, “documents”, “cache” und “external documents”, wenn ich das richtig recherchiert habe. Wenn ich jetzt alle Bilder auf der sd Karte habe und als specialfolderpath() “external documents” festlege, müsste das gehen?

                  Ich muss mich auf keinen bestimmten Ordner beschränken, eigentlich ist es völlig egal wo die Bilder liegen.

                  Grüße Tobias

                • #14113
                  Klaus Major
                  Administrator

                    Wenn ich jetzt alle Bilder auf der sd Karte habe und als specialfolderpath() “external documents” festlege, müsste das gehen?

                    Da ich selber kein Handy o.ä. besitze, um das zu testen, kann ich Dir das nicht versprechen, sollte aber funktionieren. 🙂

                  • #14114
                    albin0
                    Teilnehmer

                      Hallo Klaus,

                      ich bin schon mal an anderer Stelle weiter gekommen, mein Namensfeld steht und ich kann den Namen in einer Datei speichern. Schon mal super…

                      # Button Speichern (write)

                      on mouseUp
                      set the defaultFolder to specialFolderPath(“documents”)
                      put field “write” into URL (“file:test.txt”)
                      end mouseUp

                      Zu dem Thema, Bilder in Grid anzeigen, habe ich auch schon einen älteren Thread gefunden, hast du da geantwortet? 😉

                      Also ich hab jetzt zwei bilder in specialFolderPath(“external-documents”) wie würde denn jetzt die funktion heissen, die mir beide Bilder auf der card anzeigt.

                      Grüße

                    • #14115
                      Klaus Major
                      Administrator

                        Hi Tobias,

                        # Button Speichern (write)
                        on mouseUp
                          set the defaultFolder to specialFolderPath("documents")
                          put field "write" into URL ("file:test.txt")
                        end mouseUp

                        Ich arbeite nie mit THE DEFAULTFOLDER, slelbst wenn ich sicher bin, daß sich wirklich NICHTS in meinen Stacks auf diesen Ordner verlässt!
                        Wir können absolute Pfade haben, also benutzen wir sie auch:

                        on mouseUp
                          put field "write" into URL ("file:" & specialFolderPath("documents") & "/test.txt")
                        end mouseUp

                        Zu dem Thema, Bilder in Grid anzeigen, habe ich auch schon einen älteren Thread gefunden, hast du da geantwortet? ?

                        Wenn “Klaus” drauf steht, ist auch “Klaus” drin! 😀

                        Also ich hab jetzt zwei bilder in specialFolderPath(“external-documents”) wie würde denn jetzt die funktion heissen, die mir beide Bilder auf der card anzeigt.

                        Eine direkte Funktion gibt es dafür nicht, daher musst Du Schritt für Schritt vorgehen!
                        Kennst Du die Dateinamen der Bilder?
                        Dann kannst Du direkt:

                        ...
                        set the filename of img 1 to (specialfolderpath("external-documents") & "/name_von_bild1.jpg")
                        set the filename of img 2 to (specialfolderpath("external-documents") & "/name_von_bild2.jpg")
                        ...

                        Falls Du die Dateinamen nicht kennst:

                        ...
                        ## Inhalt des Ordners holen:
                        put files(specialfolderpath("external-documents")) into DieBilder
                        
                        ## Nur JPEGs erlauben:
                        filter DieBilder with "*.jpg"
                        set the filename of img 1 to (specialfolderpath("external-documents") & "/" & line 1 of DieBilder)
                        set the filename of img 2 to (specialfolderpath("external-documents") & "/" & line 2 of DieBilder)
                        ...

                        Sowas in der Art halt.

                        Gruß

                        Klaus

                      • #14123
                        albin0
                        Teilnehmer

                          Wenn “Klaus” drauf steht, ist auch “Klaus” drin! ?

                          😀 lol

                          Danke erstmal für die Mühe, ich schau mir das mal näher an.

                          Grüße Tobias

                        • #14127
                          albin0
                          Teilnehmer

                            Hallo,

                            wie kann ich jetzt kontrollieren was genau in der Variable “DieBilder” steht?

                            Wie kann man denn vorgehen wenn man einfach nur zwei zufällige Bilder auf die card bringen will? Ich stehe hier total auf dem Schlauch.

                            mit set the filename of img 2 to (specialfolderpath("external-documents") & "/" & line 2 of DieBilder)

                            ändere ich doch nur die Bezeichnung oder irre ich?

                            Grüße

                          • #14128
                            Klaus Major
                            Administrator

                              DieBilder enthält die Dateien im Ordner -> specialfolderpath(“external-documents”)

                              Mein Beispiel war ja nur ein ebensolches! 😎
                              Du musst natürlich noch überprüfen, ob DieBilder überhaupt JPEGs enthält.
                              Und wenn ja, wie viele.

                              mit:
                              set the filename of img 2 to (specialfolderpath("external-documents") & "/" & line 2 of DieBilder)
                              ändere ich doch nur die Bezeichnung oder irre ich?

                              Was meinst Du mit “Bezeichnung”?
                              Wenn dieser Ordner mindestens zwei Bilder enthält, zeigt dieser Befehl das zweite Bild aus der Lsite der Bilder in Deinem zweiten Bildobjekt an.

                            • #14129
                              albin0
                              Teilnehmer

                                Bildobjekt, da hast du was gesagt.

                                Selbiges fehlt mir vermutlich, weshalb ich auch null komma nix angezeigt bekomme.

                                Was brauch ich denn genau auf der card, damit das Bild auch angezeigt wird?

                                Grüße

                              • #14130
                                Klaus Major
                                Administrator

                                  Ähm, ein Bildobjekt? Vorzugsweise leer? 😀

                                  Ach ja, und ein Button, der obiges Skript ausführt.

                                  Du kannst -> DieBilder natürlich auch in einem Feld zur Kontrolle anzeigen lassen,
                                  dann benötigst Du noch ein Feldobjekt.

                                • #14131
                                  albin0
                                  Teilnehmer

                                    Jap,

                                    das der Button das script ausführt hab ich verstanden.

                                    Du wirst sicher lachen aber so sieht das gerade bei mir aus und ich komme nicht klar…

                                    on mouseUp
                                       if the environment = "mobile" then
                                          put files(specialfolderpath("external-documents")) into DieBilder
                                          put it into field test (funktioniert garnicht)
                                          set the filename of img 1 to (specialfolderpath("external-documents") & "/" & line 1 of DieBilder)
                                          set the filename of img 2 to (specialfolderpath("external-documents") & "/" & line 2 of DieBilder)
                                          #put it into DieBilder
                                          #import paint from file DieBilder
                                       else
                                          answer files "Bitte ein Bild auswählen:" with type "Jpeg,PNG|jpg,png|" 
                                          put it into DieBilder
                                          put it into field test    (zeigt mir die Dateien mit Pfad an)
                                          #import paint from file DieBilder     (Das funktioniert, allerdings unformatiert, hast du ja in dem anderen thread schon erläutert)
                                       end if
                                       
                                    end mouseUp

                                    Hm, ich glaub ich mach Schluss für Heute, ich check’s wahrscheinlich nicht mehr.

                                  • #14132
                                    Klaus Major
                                    Administrator

                                      Prbier das mal:

                                      on mouseUp
                                         if the environment = "mobile" then
                                            put files(specialfolderpath("external-documents")) into DieBilder
                                            
                                            ## Nur JPEGs erlauben, wer weiß, was sich sonst noch so in dem Ordner tummelt! 8-)
                                            filter DieBilder with "*.jpg"
                                            
                                            ## IT is leer zu diesem Zeitpunkt.
                                            ## put it into field test (funktioniert garnicht)
                                            put DieBilder into field "test"
                                            
                                            if DieBilder = EMPTY then
                                               answer "Kein JPEG vorhanden!"
                                               exit mouseup
                                            end if
                                            
                                            ## Du hast doch zwei leere Images auf der Karte, oder?
                                            set the filename of img 1 to (specialfolderpath("external-documents") & "/" & line 1 of DieBilder)
                                            set the filename of img 2 to (specialfolderpath("external-documents") & "/" & line 2 of DieBilder)
                                         else
                                            answer files "Bitte ein Bild auswählen:" with type "Jpeg,PNG|jpg,png|" 
                                            put it into DieBilder
                                            put it into field "test"
                                         end if
                                      end mouseUp
                                    • #14142
                                      albin0
                                      Teilnehmer

                                        Wow,

                                        vielen lieben Dank Klaus, du bist mein persönlicher Held heute. Echt Respekt für deine Geduld, du erklärst die Zusammenhänge ja nicht zum ersten Mal.

                                        Ich musste zwar ein bissel basteln aber nu läuft der Spaß langsam an.

                                        Hier der code bisher:

                                        
                                        on mouseUp
                                           if the environment = "mobile" then
                                              # Ordnerinhalt holen
                                              put files (specialfolderpath("external documents")) into DieBilder
                                              # nur jpgs erlauben
                                              filter DieBilder with "*.jpg"
                                              # Dateinamen im Textfeld anzeigen
                                              put DieBilder into field "test"
                                              # Wenn external documents leer ist Warnung
                                              if DieBilder = EMPTY then
                                                 answer "Kein Bild gefunden!"
                                                 exit mouseup
                                              end if
                                              
                                              # Bilder in den Bildobjekten anzeigen.
                                              set the filename of img id 1019 to (specialfolderpath("external documents") & "/" & line 1 of DieBilder)
                                              set the filename of img id 1020 to (specialfolderpath("external documents") & "/" & line 2 of DieBilder)
                                              set the filename of img id 1021 to (specialfolderpath("external documents") & "/" & line 1 of DieBilder)
                                              set the filename of img id 1022 to (specialfolderpath("external documents") & "/" & line 2 of DieBilder)
                                           else
                                              answer files "Bitte ein Bild auswählen:" with type "Jpeg,PNG|jpg,png|" 
                                              put it into DieBilder
                                              put it into field "test"
                                           end if
                                        end mouseUp

                                        In der app gibt es jetzt ein Textfeld, welches die Dateinamen im App Ordner/Files anzeigt.
                                        Es gibt 4 leere Bilder (Da muss man erstmal drauf kommen) die während des Scriptes umbenannt werden und somit auch die Bilder angezeigt werden können.
                                        Und natürlich den Start BTN der das Ganze auslöst.

                                        So jetzt muss ich nur mal sehen wie ich das ganze sinnvoll formatiert bekomme, sodass die Bilder auch anständig aussehen.

                                        Ich gehe davon aus, dass ich den Bildobjekten, welche ja im Grunde nur als Masken fungieren, auch ein on mouseUp verpassen kann.

                                        Bin erstmal happy und mache mal weiter.

                                        Vielen Dank, so langsam schließt sich der Kreis…

                                        Grüße Tobias

                                      • #14148
                                        Klaus Major
                                        Administrator

                                          Hi Tobias,

                                          So jetzt muss ich nur mal sehen wie ich das ganze sinnvoll formatiert bekomme, sodass die Bilder auch anständig aussehen.

                                          OK, ein paar Dreisätze werden Dir dabei helfen 🙂
                                          Hinweis: Die originalen Abmessungen eines Bildes in LC bekommst du mit:

                                          put the formattedwidth of img 1 into tOriginalBreite
                                          put the formattedheight of img 1 into tOriginalHöhe

                                          Damit den einen oder anderen Dreisatz berechnen und Du kannst Das Bild proportional skalieren. Wichtig, das “lockloc” (oberste Checkbox in Inspector bei -> Position) des Bildes sollte angehakt sein.

                                          Ich gehe davon aus, dass ich den Bildobjekten, welche ja im Grunde nur als Masken fungieren, auch ein on mouseUp verpassen kann.

                                          Ja, das ist korrekt.

                                          Gruß

                                          Klaus

                                        • #14162
                                          albin0
                                          Teilnehmer

                                            Hallo Klaus,

                                            danke nochmal für deinen letzten Hinweis.

                                            Hierzu hab ich folgende Idee:

                                               put the formattedwidth of Bild1 into bOriginal
                                               put the formattedheight of Bild1 into hOriginal
                                               put 1300 into sollBreite
                                               put 800 into sollHöhe
                                               
                                               if bOriginal > hOriginal then
                                                  if hOriginal > sollHöhe then
                                                     put (sollHöhe/hOriginal)*bOriginal into sollBreite
                                                  end if
                                               else
                                                  if bOriginal > sollBreite then
                                                     put (sollBreite/bOriginal)*hOriginal into sollHöhe
                                                  end if
                                               end if

                                            Obiges hab ich noch nicht getestet, aber ich möchte damit sowohl Hoch als auch Querformat Bilder an meinem Bildobjekt ausrichten, je nachdem. Kann man das theoretisch auch in eine Funktion packen? Unterstützt LC Funktionen? 😀

                                            Aktuell versuche ich aber mittels einer Schleife die einzelnen Lines aus dem “allPics” Array in Variablen zu packen, um ggf später die einzelnen Bildobjekte automatisch zu befüllen, vermutlich auch wieder mittels einer for Schleife.

                                            Ich habe jetzt mit:
                                            put the number of lines of allPics into sumAllPics
                                            Schon mal die Anzahl der Wiederholungen bzw. die Anzahl der Bilder im Ordner ermittelt.

                                            Wie würde man denn jetzt in Livecode weiter vorgehen?
                                            Also:
                                            put line 1 of DieBilder into Bild1
                                            put line 2 of DieBilder into Bild2
                                            put line 3 of DieBilder into Bild3
                                            … usw …
                                            soll in eine kleine Schleife, mittels der Anzahl der Bilder automatisiert werden.

                                            Ich hab jetzt das Gefühl hier mehrere Denkfehler zu machen und ggf ne Endlosschleife zu bauen:

                                            put line 1 of allPics into Bild
                                               repeat for sumAllPics times
                                                  line +1
                                                  answer Bild
                                                  add 1 to Bild
                                               end repeat

                                            Stehe wieder auf dem Schlauch.

                                            Danke vorweg.

                                            Grüße Tobias

                                          • #14175
                                            Klaus Major
                                            Administrator

                                              Hi Tobias,

                                              dann schaun wir mal…

                                              Unterstützt LC Funktionen?

                                              Aber HALLO!

                                              Wenn wir wie hier eine Menge Infos in diverse Variablen packen wollen, geht das leider nicht ohne ein DO Statement.

                                              ...
                                              ## put "wasauchimmer" into (Bild & i) 
                                              ## geht nicht in einem Loop
                                              ## So müsste man das machen:
                                              do "put wasauchimmer into" && (Bild & i)
                                              ...

                                              Daher bietet sich hier ein ARRAY an:

                                              ...
                                              repeat with i = 1 to sumAllPics
                                                put line i of allPics into tBildArray[i]
                                              end repeat
                                              ...

                                              Danach hast Du ein schönes Array:
                                              tBildArray[1] -> Bild1.jpg
                                              tBildArray[2] -> Bild2.jpg

                                              tBildArray[N] -> BildN.jpg

                                              put line 1 of allPics into Bild
                                                 repeat for sumAllPics times
                                                    line +1
                                                    answer Bild
                                                    add 1 to Bild
                                                 end repeat

                                              Autsch, in -> Bild steht nun ein Dateiname drin, da kannst Du nicht einfach etwas hinzuaddieren!?
                                              Siehe oben, nimm das Array, das passt am Besten zu dieser Situation.

                                              Gruß

                                              Klaus

                                          Ansicht von 19 Antwort-Themen
                                          • Du musst angemeldet sein, um auf dieses Thema antworten zu können.