German Imageview = Digitaler Bilderrahmen

fabs222

Member
Licensed User
Longtime User
Hallo,

ich möchte gerne für meinen Sohn einen digitalen Bilderrahmen machen.
Ich habe auch schon viele gelesen und probiert und das ist bis jetzt dabei raus gekommen.

B4X:
Sub Process_Globals
   Dim timer2 As Timer
End Sub

Sub Globals
   Dim exRoute As String 
   Dim List1 As List
   Dim FileNumber As Int 
   Dim FileCount As Int 
   Dim ImageView1 As ImageView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("viewtest")
   timer2.Initialize("timer2",1000)
   timer2.Interval = 5000
   timer2.Enabled =False   
   FileCount =0
    List1.Initialize        
   exRoute = File.DirRootExternal & "/Bilder"
   List1 = File.ListFiles (exRoute )
   If List1.Size > 0 Then
   FileCount = List1.Size 
   FileNumber =-1
   timer2.Enabled = True
   End If
            
End Sub

Sub Activity_Resume

End Sub

Sub timer2_tick
   Dim sFile As String 
   timer2.Enabled =False
   FileNumber = FileNumber + 1
   If FileNumber +1 > FileCount Then      
   FileNumber=0
   Else
   Return
   End If
   sFile= List1.Get (FileNumber)
   DoEvents
   ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
      
End Sub
Geht leider nicht. Die Bilder liegen im Ordner Bilder auf der SD.

Kann mir bitte jemand einen Tipp geben was ich falsch mache.

LG
Fabs222
 

specci48

Well-Known Member
Licensed User
Longtime User
Wo genau liegt denn das Problem? Findet er die Bilder nicht, oder gibt es eine Fehlermeldung?
 

klaus

Expert
Licensed User
Longtime User
Du solltest mal Deine timer2_Tick Routine genau analysieren und verstehen was darin vorgeht. Da sind leider etliche Fehler drin.
Aber es ist bestimmt besser wenn Du die selbst herausfindest als dass wir sie Dir zeigen, so was nennt sich dann eben Erfahrung.
Um das zu analysieren kannst Du einen Breakpoint setzen und dann Schritt für Schritt die Routine durchlaufen.

Beste Grüsse.
 

fabs222

Member
Licensed User
Longtime User
Okay, danke Klaus habe es hin bekommen, das mit dem Breakpoint hat echt geholfen:sign0188:

Hier der Code
B4X:
Sub Process_Globals
   Dim timer2 As Timer
End Sub

Sub Globals
   Dim exRoute As String 
   Dim List1 As List
   Dim FileNumber As Int 
   Dim FileCount As Int 
   Dim ImageView1 As ImageView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("viewtest")
   timer2.Initialize("timer2",5000)
   timer2.Enabled =False   
   FileCount =0
    List1.Initialize        
   exRoute = File.DirRootExternal & "/Bilder"
   List1 = File.ListFiles (exRoute )
   If List1.Size > 0 Then
   FileCount = List1.Size 
   FileNumber =-1
   timer2.Enabled = True
   End If
            
End Sub

Sub timer2_tick
   Dim sFile As String 
   timer2.Enabled =False
   FileNumber = FileNumber + 1
   If FileNumber +1 > FileCount Then      
   FileNumber=0
   End If
   sFile= List1.Get (FileNumber)
   DoEvents
   ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
   timer2.Enabled = True
End Sub

Zwei kleine Fragen hätte ich aber noch.
1. Wie kann ich es anstellen das nur jpg Datein geladen werden (falls mal andere Datein im Ordner liegen sollen)?
2. Wie kann ich es anstellen das der Code alle (z.Bsp.) 2 Stunden überprüft ob neue Datein im Ordner liegen und diese dann abspielt?

Liebe Grüße
Fabs222
 
Last edited:

Kiffi

Well-Known Member
Licensed User
Longtime User
1. Wie kann ich es anstellen das nur jpg Datein geladen werden (falls mal andere Datein im Ordner liegen sollen)?
hierzu habe ich Dir bereits einen Code gepostet. Dieser liest nur die in einem
Ordner befindlichen MP3-Dateien ein. Es sollte für Dich ein leichtes sein, ihn
entsprechend anzupassen.

Grüße ... Kiffi
 

klaus

Expert
Licensed User
Longtime User
Ich schlage Dir vor die timer2_Click Routine folgendermassen zu ändern:
B4X:
Sub timer2_tick
    Dim sFile As String 
    FileNumber = FileNumber + 1
    If FileNumber +1 > FileCount Then        
      FileNumber=0
    End If
    sFile= List1.Get (FileNumber)
    ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
End Sub
2) Das kannst Du mit einem Timer machen.

Beste Grüsse.
 

starkR

Member
Licensed User
Longtime User
Hallo !

Das Thema ist zwar schon eine Weile her, aber da ich mich erst seit kurzem mit dem Programm beschäftige hätte ich zu diesem Programm noch eine kleine Frage.

Leider habe ich im gesamten Forum nichts gefunden.

Wie kann ich denn im lokalen Netzwerk auf einen Bilderordner vom NAS zugreifen ? (Synology DS212j als Beispiel)

Vielen Dank im voraus

Gruß
starkR
 

DonManfred

Expert
Licensed User
Longtime User
Vermutlich mit der SMb-Lib wenn die Freigaben vom NAS sich wie eine SMB-Freigabe verhält...
 

starkR

Member
Licensed User
Longtime User
Hi !
SMB habe ich jetzt auch gefunden und mal getestet.
Das funktioniert auch soweit, sprich die Dateien kann ich zählen, Ordner auslesen etc.
Was ich in dieser Lib nicht gefunden habe ist so etwas wie in dem Beispiel Dateien direkt bzw. in beliebiger Reihenfolge zu laden (also per RND Filenumber)
Trotzdem Dank !
 

starkR

Member
Licensed User
Longtime User
Hallo nochmals,
habe die Routine von oben (mit und ohne Anpassung von 'klaus') mal eine weile laufen lassen.
Nach einigen Minuten folgt die Fehlermeldung:

java.io.FileNotFoundException: /mnt/storage/Pictures/cache: open failed: EISDIR (Is a directory)

und danach stoppt die Slideshow.

Hat da jemand eine Idee ?

Danke
 

klaus

Expert
Licensed User
Longtime User
Dann musst Du testen ob der Dateiname ein Ordner ist.
Hast Du den Ordner vom ersten Post geändet, es war exRoute = File.DirRootExternal & "/Bilder"?
Wenn JA ersetze exRoute durch den Ordnernamen.
B4X:
If File.IsDirectory(exRoute, sFile) = False Then
    ImageView1.Bitmap=LoadBitmap(exRoute,sFile)
End If
 

starkR

Member
Licensed User
Longtime User
Danke für die Rückmeldung.
Ich probiere das gleich mal aus.
Nur zum Verständnis ? werden denn auch Ordner in

List1 = File.ListFiles (exRoute )

mit einbezogen ?

Ich Probiere und gebe Rückmeldung !
Gruß
 

DonManfred

Expert
Licensed User
Longtime User
Nur zum Verständnis ? werden denn auch Ordner in
List1 = File.ListFiles (exRoute )
mit einbezogen ?

Ja. das listFILES ist vielleicht etws nglücklich... es ist eigentlich ein ListDIR... Es werden alle Ordner und Dateien in dem Pfad gelistet. Auch "." und ".."
 

MaFu

Well-Known Member
Licensed User
Longtime User

starkR

Member
Licensed User
Longtime User
Hallo !

Rückmeldung: es funktioniert, Danke für die Unterstützung !!!!

Ja, leider sehr "unglücklich" das ListFiles, deswegen bin ich da erstmal auch nicht drauf gekommen.
Ein mitlaufendes LOG gab auch keinen Hinweis darauf, aber wie schon Anfangs bemerkt, stecke ich auch noch absolut in den Anfängen und Probiere hier und da etwas rum.

Danke nochmals !

starkR
 
Top