German Auf Bilder aus der Galerie zugreifen

Lothar Kriegerow

Active Member
Hallo,

ich würde gern auf die Bilder meiner Galerie zugreifen.

Ich habe mir schon X Beispiele angeschaut und auch selbst etwas geschrieben. Leider sind alle mir bekannten Möglichkeiten zu langsam. Ich habe in meiner Galerie eine unbestimmte Anzahl (ca. 900) Bilder. Von diesen müsste ich welche auswählen können. Da ich, um die Bilder auf einem Scrollview anzeigen zu können, diese zuerst in ein Datenfeld (Liste) einlesen muss, dauert diese Methode unakzeptabel lange.

Ich würde nun eine andere Möglichkeit in Betracht ziehen. Ich würde gern die Galerie von meinem Programm öffnen wollen und dort ein Bild auswählen können.

Ist so etwas mit B4A machbar?

Ich bin für jeden Rat dankbar.

Vielleicht gibt es ja auch eine andere Möglichkeit, zügig an die Bilder zu gelangen?

Gruß Lothar
 

Alexander Stolte

Expert
Licensed User
Longtime User
Ist so etwas mit B4A machbar?
Ja, sogar ganz einfach.
Du brauchst folgende lib. von mir:
Das View kannst du einfach auf deine Form hinzufügen, es zeigt kacheln an mit thumbnails von den Bildern, die du dann auswählen kannst.
Um das lesen zu beschleunigen habe ich das View mit dem MediaBrowser kompatibel gemacht.
Im Anhang ist ein Beispiel Projekt für dich.

B4X:
Dim rp As RuntimePermissions
    rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
    Wait For Activity_PermissionResult (Permission As String, result As Boolean)
    
    Log(File.DirDefaultExternal) 'brauch ich in diesem example, weil sonst der "zulassen" dialog nicht getriggerd wird.
    
    If result = True Then
    
    Dim MB As MediaBrowser
    MB.Initialize("MB")
    Dim tmp_m As Map = MB.GetMediaImageList(True, "datetaken DESC") 'Von Neu zu Alt Sortiert
    
    'ASGallery1.xCustomListView.Clear
    ASGallery1.WildCards = "*.jpg,*.png,*.jpeg,*.bmp" 'all die extensions werden ins grid geladen   
    ASGallery1.SetAllImagesMediaStore(tmp_m,"") 'die bilder werden in das grid geladen
    
    Else
        Log("need permissions")
    End If
mehr code brauchst du nicht mit dem view.
 

Attachments

  • AS Gallery MediaBrowser Example.zip
    4.1 KB · Views: 235

Lothar Kriegerow

Active Member
Hallo Alexander,

Gern würde ich mir das View ansehen. Es klingt sehr gut. Genau das was ich suche.

Leider fehlt das Modul ASGalery.bas, welches Du vom OneDrive lädst.
Könntest Du mir das noch zur Verfügung stellen?

Danke Lothar
 

Lothar Kriegerow

Active Member
Hallo Alexander,

Nach anfänglicher Euphorie kam gleich wieder die Ernüchterung.

Im Projekt werden einige Einträge angemeckert. Sicher fehlt mir noch eine Bibliothek.
Ich habe schon einige Artikel gelesen und auch einiges ausprobiert, aber unterstreicht mir immer etliches In Deinem Fall

B4X:
Dim MB As MediaBrowser
    MB.Initialize("MB")
    Dim tmp_m As Map = MB.GetMediaImageList(True, "datetaken DESC") 'Von Neu zu Alt Sortiert
    
    UND
    
    Private ImageLoader As BitmapsAsync

Sicher ist das für jemanden, der schon einiges mit B4A gemacht hat, ein triviales Problem. Für mich leider nicht.

Kannst Du noch einmal helfend eingreifen?


Welchen Link oben meinst DU? AS Views Overview?

Ich habe ein Modul mit dem Namen ASGalery.bas gefunden. Keine Ahnung, ob das das richtige ist.

Danke Lothar
 

Alexander Stolte

Expert
Licensed User
Longtime User
Ich habe ein Modul mit dem Namen ASGalery.bas gefunden. Keine Ahnung, ob das das richtige ist.
Ja das ist das richtige.

Folgende Bibliotheken werden benötig für das Beispiel-Projekt:
1604218579662.png

BitmapAsync, JpegUtils, MediaBrowser, PreoptimizedCLV
 

Lothar Kriegerow

Active Member
Hallo Alexander,

die Libaries habe ich jetzt drin. As sieht jetzt so aus wie bei Dir. Auch die Versionen stimmen.

Dieser Fehler erscheint nun.

Unbekanntes Mitglied: setallimagesmediastore

B4X:
Dim tmp_m As Map = MB.GetMediaImageList(True, "datetaken DESC") 'Von Neu zu Alt Sortiert

Diese Zeile wird moniert.

Was muss ich den da noch tun?


Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo Alexander,

es funktioniert nun - Danke!

Das ist ja eine Hammer-Geschwindigkeit.
Noch eine Frage:
Ich habe auf der externen SD_Karte 5 Verzeichnisse mit insgesamt 2000 Bildern. Die sortiert es nun alle in das Grid ein. Da sind Bilder von WhatsApp etc. drin.

Gibt es eine Möglichkeit, da noch etwas zu separieren?

Wenn nicht - OK.

Vielen Dank für dieses großartige Tool.

Gruß Lothar.
 

Alexander Stolte

Expert
Licensed User
Longtime User
Gibt es eine Möglichkeit, da noch etwas zu separieren?
Ja gibt es.
Ich habe das Projekt mal erweitert.
Ich habe eine ComboBox hinzugefügt, wo du dir entweder alle anzeigen lassen kannst oder einen speziellen Ordner.
Und eine Lade-Animation ist auch hinzugefügt.
 

Attachments

  • AS Gallery MediaBrowser Example.zip
    4.9 KB · Views: 214

Lothar Kriegerow

Active Member
Hallo Alexander,

VIELEN VIELEN DANK!!!

Das ist ja der absolute Hammer. Deine View funktioniert perfekt! Ich habe sich schon in mein Programm integriert. Das hat mir ein echtes Problem abgenommen.
Schade nur, dass ich es nicht selbst hinbekommen habe. Da brauche ich wohl noch ein paar Jahre.

Gruß Lothar
 

Wosl

Member
Hallo Alexander,

mit deiner Lib habe ich den ersten Schritt gefunden, den ich mühsam im Forum gesucht habe:

Ich will in meiner App (Vorsicht: ich bin leider noch lange kein Experte) aus der Gallery mehrere Bilder gleichzeitig auswählen, die gewählten Bilder als Kopie abspeichern und dann später in meiner App bei Bedarf laden und anzeigen lassen kann (z.B. als ImageView).

Mit deiner Lib kann ich jetzt alle Bilder (auch in verschiedenen Folder) anzeigen lassen. Das klappt wunderbar!! Jetzt fehlt mir noch der nächste Schritt: auswählen, JPEG Dateiname intern umbenennen/festlegen und abspeichern in einem Folder, in dem die Daten meiner App abgelegt sind. Ich vermute mal, sowas muss in deinem Beispiel in die Click-Event Routine

Gallery Click Event:
Sub ASGallery1_PreviewClick(path As String,isImage As Boolean)

    'hier kannst du das bild was du angeklickt hast laden

End Sub

Ich habe nun einige hilflose Versuche unternommen, wenigstens ein ausgewähltes Bild zu kopieren und abzuspeichern. In verschiedenen Forum-Beiträgen findet man dazu Ansätze.
B4X:
Sub Activity_Create(FirstTime As Boolean)
...
    Dim ImageChooser1 As ContentChooser
...
    ImageChooser1.Initialize("imgChooser1")
    ImageChooser1.show("image/*", "Choose image")
...

Sub imgChooser1_Result(Success As Boolean, Dir As String, FileName As String)
    If Success Then
        File.Copy(Dir, FileName, File.DirRootExternal, "1.png")
        Log("Filename=" & FileName)
    Else
        ToastMessageShow("Geht nicht", True)
    End If
End Sub

Hast Du einen Code Schnippsel, um ausgewählte Bilder aus der Gallery zu kopieren, den ich in deine Event Routine integrieren kann? Das würde mir sehr weiterhelfen.

Viele Grüße
Wolfgang
 

Wosl

Member
Hallo, verstanden, das ist wirklich eine andere Fragestellung.

Ich habe mir das Demo Projekt "AS Gallery Medienbrowser" angesehen und eine, vielleicht etwas schräge Frage:
die Demo nutzt den Visual Designer (LoadLayout - frm_main). Ich habe ein älteres B4X Projekt, in dem ich diesen Medienbrowser einbauen möchte. In diesem Projekt wird das komplette Layout ohne den Designer definiert. Zum Einbau müsste ich den Medienbrowser in einem Panel definieren und Event gesteuert aufrufen. Wie kann ich das machen ohne den Designer zu bemühen?

Gruß
Wolfgang
 
Top