Startseite › Foren › Deutsches LiveCode-Forum › Galerie möglich?
Schlagwörter: Bilder Galerie
- Dieses Thema hat 19 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren von
Klaus Major.
-
AutorBeiträge
-
-
April 14, 2019 um 22:54 Uhr #14092
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.
Grüße Tobias
-
April 15, 2019 um 06:36 Uhr #14094
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 -
April 15, 2019 um 07:27 Uhr #14095
Guten Morgen,
Danke Michael, dass hatte ich noch nicht gesehen, schau ich mir an.
?♂️
-
April 15, 2019 um 11:46 Uhr #14107
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
-
April 15, 2019 um 12:26 Uhr #14108
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
-
April 15, 2019 um 13:06 Uhr #14112
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
-
April 15, 2019 um 13:09 Uhr #14113
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. 🙂
-
April 15, 2019 um 13:44 Uhr #14114
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 mouseUpZu 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
-
April 15, 2019 um 13:58 Uhr #14115
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
-
April 15, 2019 um 18:42 Uhr #14123
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
-
April 15, 2019 um 21:26 Uhr #14127
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
-
April 15, 2019 um 21:51 Uhr #14128
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. -
April 15, 2019 um 22:01 Uhr #14129
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
-
April 15, 2019 um 22:18 Uhr #14130
Ä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. -
April 15, 2019 um 22:36 Uhr #14131
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.
-
April 15, 2019 um 23:20 Uhr #14132
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
-
April 16, 2019 um 13:43 Uhr #14142
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
-
April 16, 2019 um 16:46 Uhr #14148
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
-
April 17, 2019 um 21:33 Uhr #14162
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
-
April 18, 2019 um 07:19 Uhr #14175
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.jpgput 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
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.