Spanish Error al intentar guardar imagen de camara en algunos dispositivos

desof

Well-Known Member
Licensed User
Longtime User
Estoy creando una app y la voy probando en 2 dispositivos y en uno que tiene una tarjeta SD funciona correcto y en el otro, no se si esto tendrá que ver o no!. Aca esta la captura para mostrarles .

H1zZ3XP.png


Utilizo una variable Global RUTA= File.DirDefaultExternal para definir el directorio de trabajo
y el error me lo da en la linea ( Bitmap1.InitializeSample (Main.RUTA, "tmpImagen.jpg",100%x,100%y)) de este código luego de sacar la foto y escribirla en un archivo temporal


B4X:
Sub camera(Directory As String, PictureName As String)
    Dim i As Intent
 
   
    i.Initialize("android.media.action.IMAGE_CAPTURE", "" )
    i.PutExtra("crop", "true") 'crop ON
    i.PutExtra("aspectX", 0) 'crop aspects
    i.PutExtra("aspectY", 0) 'crop aspects
    i.PutExtra("outputX", 180) 'crop size
    i.PutExtra("outputY", 310) 'crop size
    i.PutExtra("output", ParseUri("file://" & File.Combine(Directory, PictureName)))
    StartActivity(i)
   
    Sleep(2000)
   
   
    Try
        ImageView1.Visible=True
        Dim Bitmap1 As Bitmap
       
        Bitmap1.InitializeSample (Main.RUTA, "tmpImagen.jpg",100%x,100%y)              
           
    Catch
        Msgbox(LastException,"")
    End Try
   
End Sub
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas!!!
Pues si, tiene q ver, estás intentando acceder a una tarjeta de memoria que no existe...
B4X:
File.DirDefaultExternal
hace referencia a la tarjeta de memoria.
Prueba a guardarlo en File.DirInternal

Un saludo.
 

desof

Well-Known Member
Licensed User
Longtime User
Muy buenas!!!
Pues si, tiene q ver, estás intentando acceder a una tarjeta de memoria que no existe...
B4X:
File.DirDefaultExternal
hace referencia a la tarjeta de memoria.
Prueba a guardarlo en File.DirInternal

Un saludo.

Nada parece funcionar he probado con todas las posibilidades comentadas y en todas exactamente el mismo error.
B4X:
If File.ExternalWritable Then
        RUTA= File.DirDefaultExternal' DirRootExternal'DirInternalCache ' DirInternal
    Else
        RUTA=File.DirRootExternal
    End If

Y lo extraño es que If File.ExternalWritable me devuelve True ... ?
 

JCO

Active Member
Licensed User
Longtime User
Hola,

Veo que un línea utilizas : File.Combine(Directory, PictureName)
y en la otra: Main.RUTA, "tmpImagen.jpg"

Estás seguro de que en todos los casos PictureName= "tmpImagen.jpg"?
A lo mejor el problema viene por ahí ...

Saludos,
Julio
 

desof

Well-Known Member
Licensed User
Longtime User
Hola,

Veo que un línea utilizas : File.Combine(Directory, PictureName)
y en la otra: Main.RUTA, "tmpImagen.jpg"

Estás seguro de que en todos los casos PictureName= "tmpImagen.jpg"?
A lo mejor el problema viene por ahí ...

Saludos,
Julio


No estoy muy seguro de como trabaja File.Combine .. Como tendria que ser ?
Lo que veo es siguiendo paso a paso el código que miro desde el explorador de archivos y nunca lo escribe.
 

JCO

Active Member
Licensed User
Longtime User
No es por el File.combine, sino por los dos nombres diferentes del archivo
Intenta cambiando:
B4X:
Bitmap1.InitializeSample (Main.RUTA, "tmpImagen.jpg",100%x,100%y)
Por
B4X:
Bitmap1.InitializeSample (Main.RUTA, PictureName,100%x,100%y)
 

desof

Well-Known Member
Licensed User
Longtime User
Lo probaré pero si yo estoy pasando el parámetro a 'Sub' de esta manera camera(Main.RUTA, "tmpImagen.jpg") no seria lo mismo?
 

edgar_ortiz

Active Member
Licensed User
Longtime User
DeSoft,

Hace tiempo hice una aplicación que tomaba una foto y después la procesaba... también utilizaba "File.DirDefaultExternal", el problema era que entre la "captura" de la foto y el tratar de "abrirla" el archivo aun no estaba disponible.

Despues de:
B4X:
i.PutExtra("output", ParseUri("file://" & File.Combine(Directory, PictureName)))

Prueba:
B4X:
Dim lcIntent    As Intent

lcIntent.Initialize("android.intent.action.MEDIA_SCANNER_SCAN_FILE", "file://" & File.Combine(Directory, PictureName))
Phone.SendBroadcastIntent(lcIntent)

Espero te sirva,

Saludos,

Edgar
 

desof

Well-Known Member
Licensed User
Longtime User
DeSoft,

Hace tiempo hice una aplicación que tomaba una foto y después la procesaba... también utilizaba "File.DirDefaultExternal", el problema era que entre la "captura" de la foto y el tratar de "abrirla" el archivo aun no estaba disponible.

Despues de:
B4X:
i.PutExtra("output", ParseUri("file://" & File.Combine(Directory, PictureName)))

Prueba:
B4X:
Dim lcIntent    As Intent

lcIntent.Initialize("android.intent.action.MEDIA_SCANNER_SCAN_FILE", "file://" & File.Combine(Directory, PictureName))
Phone.SendBroadcastIntent(lcIntent)

Espero te sirva,

Saludos,

Edgar

Gracias por tu ayuda amigo, cuando me diste esta solucion ya habia migrado a otra forma de hacerlo basado en el nuevo tutorial de Camera2 de Erel .
https://www.b4x.com/android/forum/threads/camera2-new-camera-library.83855/.
Por lo tanto no pude probar si era una cuestión de tiempo.
 
Top