Galerie möglich?

Startseite Foren Deutsches LiveCode-Forum Galerie möglich?

Schlagwörter: 

Dieses Thema enthält 19 Antworten und 3 Teilnehmer. Es wurde zuletzt aktualisiert von  Klaus Major vor 1 Monat, 4 Wochen.

  • 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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

    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
    Moderator

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

    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
    Moderator

    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
    Moderator

    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

Du musst angemeldet sein, um auf dieses Thema antworten zu können.