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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      Ä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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.