Italian unire fotocamera a test di una label

tmtube73

Active Member
Licensed User
buongiorno a tutti,
sto provando a capire questo esempio senza successo
https://www.b4x.com/android/forum/t...ra2-with-overlaid-compass.101037/#post-634778

io ho una activity con un panel1 che visualizza la fotocamera inizializzata con

B4X:
camEx.Initialize(Panel1, frontCamera, Me, "Camera1")

ho posizionato sopra al panel1 una label con scritto "ciao" e durante l'utilizzo della app la label si vede correttamente.

quando scatto la foto vorrei ottenere la foto scattata dalla fotocamera unita alla scritta ciao della label

quell'esempio sopra riportato è troppo complicato per uno del mio livello in b4x c'è qualcuno che può chiarirmi o semplificarmi quell'esempio?
 

Star-Dust

Expert
Licensed User
Usa il metodo snapshot (B4XView) nel pannello che contiene sia la cam che la label
 

tmtube73

Active Member
Licensed User
ho provato ma senza successo, la foto viene creata ma non contiene nulla

il pannello della fotocamera si chiama panel1 cosi dichiarato

B4X:
Private Panel1 As Panel

la label sopra il panel1 si chiama LblProva cosi dichiarata

B4X:
Dim LblProva As Label

su click del pulsante BtnSnapshot eseguo

B4X:
Private Sub BtnSnapshot_Click
    Dim bmp As B4XBitmap = Crop_Image(Panel1, Panel1.left, Panel1.top, Panel1.width, Panel1.height )
    Dim bmp As B4XBitmap = Crop_Image(Panel1, 0, 0, Panel1.width, Panel1.height )
    Dim out As OutputStream
    out = File.OpenOutput(File.DirRootExternal & "/foto", "1.png", False)
    bmp.WriteToStream(out, 100, "PNG")
    out.Close
End Sub

B4X:
Sub Crop_Image(V As B4XView, left As Int, top As Int, width As Int, height As Int) As Bitmap
 
    Return V.Snapshot.Crop(left, top, width, height)
 
End Sub
 

sirjo66

Well-Known Member
Licensed User
Longtime User
la label sopra il panel1 si chiama LblProva cosi dichiarata

B4X:
Dim LblProva As Label

Occhio che la Label non deve essere sopra al Panel, bensì dentro al Panel, non è la stessa cosa
 

tmtube73

Active Member
Licensed User
forse sono riuscito ma a incollarla sul panel1 ma quando inizializza la camera mi da errore a questa riga

B4X:
cam.Initialize2(Panel1, "camera", id)

errore: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.SurfaceView
 

LucaMs

Expert
Licensed User
Longtime User
come verifico se è dentro e non soltanto sopra? 🤔
1653928831228.png


Nell'immagine, il Parent di Label1 è Panel1, ovvero Label1 è contenuta in Panel1. Se fosse Activity, magari vedresti (sempre nel Designer) Label1 sopra Panel1 ma non sarebbe contenuto in esso.

Altro modo è guardare l'albero delle View:
1653928987191.png
 

LucaMs

Expert
Licensed User
Longtime User
forse sono riuscito ma a incollarla sul panel1 ma quando inizializza la camera mi da errore a questa riga

B4X:
cam.Initialize2(Panel1, "camera", id)

errore: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.SurfaceView
Non penso che il messaggio d'errore si riferisca a quella riga, l'inizializzazione della camera. Comunque, verifica di aver dichiarato Panel1 proprio come Panel.
 

tmtube73

Active Member
Licensed User
View attachment 129775

Nell'immagine, il Parent di Label1 è Panel1, ovvero Label1 è contenuta in Panel1. Se fosse Activity, magari vedresti (sempre nel Designer) Label1 sopra Panel1 ma non sarebbe contenuto in esso.

Altro modo è guardare l'albero delle View:
View attachment 129776
ho visto ora il tuo consiglio ho messo parent panel1 nella label ma quando inizializza il panel1 si blocca sull'istruzione indicata prima

B4X:
cam.Initialize2(Panel1, "camera", id)
 

LucaMs

Expert
Licensed User
Longtime User
errore: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.view.SurfaceView
L'errore non può essere là, visto che il messaggio si riferisce a una TextView (il che non significa necessariamente una EditText ma di certo non un Panel).
 

José J. Aguilar

Expert
Licensed User
In the code in post #4, see the comments in second line

B4X:
Private Sub BtnSnapshot_Click
    Dim bmp As B4XBitmap = Crop_Image(Panel1, Panel1.left, Panel1.top, Panel1.width, Panel1.height )
    Dim bmp As B4XBitmap = Crop_Image(Panel1, 0, 0, Panel1.width, Panel1.height ) '<--- again bmp? Shouldn't be bmp2? And Panel1, I think it should be Label1
    Dim out As OutputStream
    out = File.OpenOutput(File.DirRootExternal & "/foto", "1.png", False)
    bmp.WriteToStream(out, 100, "PNG")
    out.Close
End Sub

You get a snapshot from the camera panel, another one of the label, then you create a new bmp with the two overlaid images.

Upload your project to test.
 
Top