Italian Creare immagine di un oggetto

Fulvio75

Well-Known Member
Licensed User
Ciao a tutti, esiste un modo per catturare l'immagine di un oggetto presente sullo schermo del telefono?
Es: ho una clw e vorrei creare un immagine della sola clw presente sullo schermo
Tipo: captureimage (clw)
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Di una tua app o di qualunque sia attiva in quel momento? In questo secondo caso, direi proprio di no!

Se invece è una tua app, usa una variabile di tipo B4XView e "mettici" la tua View, quindi usa il metodo SnapShot della B4XView:

Dm xView As B4XView = TuaView
Dim bmp As Bitmap = xView.SnapShot
 

Fulvio75

Well-Known Member
Licensed User
Nono della mia app... Sul layout che vado ad aprire ho una clw con due righe contenenti dei dati e devo catturarne l'immagine da salvare premendo un bottone
 

LucaMs

Expert
Licensed User
Longtime User
Tutti gli oggetti??
Puoi usare il metodo del mio primo post su tutte le View (oggetti non ha significato).
Per salvare una Bitmap ad esempio di un Button:
B4X:
Dim xView As B4XView = Button1
Dim Bitmap1 As B4XBitmap = xView.Snapshot
Dim Out As OutputStream
Out = File.OpenOutput(File.DirInternal, "MiaBitmap.png", False)
Bitmap1.WriteToStream(Out, 100, "PNG")
Out.Close

(Codice non provato ma dovrebbe funzionare)
 

Fulvio75

Well-Known Member
Licensed User
Puoi usare il metodo del mio primo post su tutte le View (oggetti non ha significato).
Per salvare una Bitmap ad esempio di un Button:
B4X:
Dim xView As B4XView = Button1
Dim Bitmap1 As B4XBitmap = xView.Snapshot
Dim Out As OutputStream
Out = File.OpenOutput(File.DirInternal, "MiaBitmap.png", False)
Bitmap1.WriteToStream(Out, 100, "PNG")
Out.Close

(Codice non provato ma dovrebbe funzionare)
Ok provo io grazie
 

Sagenut

Expert
Licensed User
Longtime User
Avevo dato la stessa soluzione per la stessa domanda nel forum internazionale
https://www.b4x.com/android/forum/threads/xcustomlistview-to-image.115769/
Ma l'utente diceva che comunque otteneva lo snapshot solo della parte visibile.
Erel gli suggerì di usare:
B4X:
clv.sv.ScrollViewInnerPanel.Snapshot
L'utente non ha più risposto quindi sospetto che potesse essere stata la soluzione ideale.
 

Fulvio75

Well-Known Member
Licensed User

Fulvio75

Well-Known Member
Licensed User
Puoi usare il metodo del mio primo post su tutte le View (oggetti non ha significato).
Per salvare una Bitmap ad esempio di un Button:
B4X:
Dim xView As B4XView = Button1
Dim Bitmap1 As B4XBitmap = xView.Snapshot
Dim Out As OutputStream
Out = File.OpenOutput(File.DirInternal, "MiaBitmap.png", False)
Bitmap1.WriteToStream(Out, 100, "PNG")
Out.Close

(Codice non provato ma dovrebbe funzionare)
Funziona perfettamente...
Domanda… anziché File.DirInternal, per scriverlo in download???
grazie
 

Fulvio75

Well-Known Member
Licensed User
Nun me fa' domande arcane pure te :)

(tradotto dal romanesco all'italiano, significa: "Cosa intendi dire, esattamente?".
Il file devo metterlo in Download ma mi dice permission denided

B4X:
'Crea un immagine dell'oggetto passato in Download
Sub CreateObj_PNG(obj As B4XView,FileName As String)
    
    Dim xView As B4XView = obj
    Dim Bitmap1 As B4XBitmap = xView.Snapshot
    Dim Out As OutputStream
    Dim rp As RuntimePermissions

    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    
'    'se il file esiste lo cancello
'    If File.Exists(rp.GetSafeDirDefaultExternal(""),FileName & ".png") = True Then
'        File.Delete(rp.GetSafeDirDefaultExternal(""),FileName & ".png")
'    End If
    
    Out = File.OpenOutput(File.Combine(File.DirRootExternal,"Download"), FileName & ".png", False)
    
    'Out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), FileName & ".png", False)
    Bitmap1.WriteToStream(Out, 100, "PNG")
    Out.Close
    
End Sub
 

Fulvio75

Well-Known Member
Licensed User
:p
E io che ne so come tu lo metti in download?
Te la fù vedè mi….

B4X:
'Crea un immagine dell'oggetto passato in Download
Sub CreateObj_PNG(obj As B4XView,FileName As String)
    
    Dim xView As B4XView = obj
    Dim Bitmap1 As B4XBitmap = xView.Snapshot
    Dim Out As OutputStream
    Dim rp As RuntimePermissions

    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)

    'se il file esiste lo cancello
    If File.Exists(File.Combine(File.DirRootExternal,"Download"),FileName & ".png") = True Then
        File.Delete(File.Combine(File.DirRootExternal,"Download"),FileName & ".png")
    End If
    
    Out = File.OpenOutput(File.Combine(File.DirRootExternal,"Download"), FileName & ".png", False)
    
    Bitmap1.WriteToStream(Out, 100, "PNG")
    Out.Close
    
End Sub

:p
 

Star-Dust

Expert
Licensed User
Longtime User
Il file devo metterlo in Download ma mi dice permission denided

B4X:
'Crea un immagine dell'oggetto passato in Download
Sub CreateObj_PNG(obj As B4XView,FileName As String)
   
    Dim xView As B4XView = obj
    Dim Bitmap1 As B4XBitmap = xView.Snapshot
    Dim Out As OutputStream
    Dim rp As RuntimePermissions

    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
   
'    'se il file esiste lo cancello
'    If File.Exists(rp.GetSafeDirDefaultExternal(""),FileName & ".png") = True Then
'        File.Delete(rp.GetSafeDirDefaultExternal(""),FileName & ".png")
'    End If
   
    Out = File.OpenOutput(File.Combine(File.DirRootExternal,"Download"), FileName & ".png", False)
   
    'Out = File.OpenOutput(rp.GetSafeDirDefaultExternal(""), FileName & ".png", False)
    Bitmap1.WriteToStream(Out, 100, "PNG")
    Out.Close
   
End Sub
Credo che non sia corretta la richiesta dei permessi. Ci vuole il Wait For con per l'evento Activity_PermissionResult (Permission As String, Result As Boolean).
Perchè esce dal programma avviando l'intent di richiesta e poi rientra solelvando l'evento PermissioneResult
 

Star-Dust

Expert
Licensed User
Longtime User
:p
Te la fù vedè mi….

B4X:
'Crea un immagine dell'oggetto passato in Download
Sub CreateObj_PNG(obj As B4XView,FileName As String)
   
    Dim xView As B4XView = obj
    Dim Bitmap1 As B4XBitmap = xView.Snapshot
    Dim Out As OutputStream
    Dim rp As RuntimePermissions

    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)

    'se il file esiste lo cancello
    If File.Exists(File.Combine(File.DirRootExternal,"Download"),FileName & ".png") = True Then
        File.Delete(File.Combine(File.DirRootExternal,"Download"),FileName & ".png")
    End If
   
    Out = File.OpenOutput(File.Combine(File.DirRootExternal,"Download"), FileName & ".png", False)
   
    Bitmap1.WriteToStream(Out, 100, "PNG")
    Out.Close
   
End Sub

:p
Funziona solo se hai già dato il permesso e quindi anche se non aspetta fa nulla. Ma su una nuova installazione non và più
 

Star-Dust

Expert
Licensed User
Longtime User

Fulvio75

Well-Known Member
Licensed User
Funziona solo se hai già dato il permesso e quindi anche se non aspetta fa nulla. Ma su una nuova installazione non và più
Hai ragione la prima volta mi butta fuori dall'app… poi funziona quindi cosa devo fare?
 
Top