Spanish Problema Image View [SOLUCIONADO]

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, perdón las molestias, tengo una dudilla.
Tengo un Imageview que cuando doy a click me abre las galerías para que seleccione una imagen y quede reflejada en dicho Imageview.

El problema es que a veces me la muestra y a veces no, todas están echa con la cámara del móvil con lo cual tienen que tener el mismo tamaño y formato.

¿Alguien sabe por que puede ser? , pongo el código.

Codigo cuando pulso el ImageView
B4X:
   Try
      VerGaleriaFotos.Show("image/ *jpeg","Seleccione Imagen")
   Catch
      Log("Error al cargar galería")
   End Try

Evento que muestra la foto luego en el Listview

B4X:
    Log("EventoGaleriaFotos_Result Success: " & Success)
  
  
    If Success = False Then Return ' no se seleccionó imagen
  
    Log("Dir " & Dir) ' Directorio de la imagen
    Log("FileName " & FileName) ' Nombre del fichero

   ' ya puedes emplearlo en cualquier sitio
   ImagenSeleccionada = FileName 
   DirSeleccionado = Dir
  
     IVfoto.Bitmap = LoadBitmap(Dir,FileName) ' con esto mostramos la foto en el listview
    
End Sub
 

TheFalcon

Active Member
Licensed User
Longtime User
Buenas de nuevo, e comprobado varias cosas y el problema esta cuando la imagen que selecciono esta en la Carpeta CÁMARA con el Icono de la cámara, si cojo una imagen de cualquier otra carpeta ya sea Screen, whatsapp imágenes etc la pone sin problemas.

De vez en cuando pero muy de vez en cuando si e cargado una imagen de otra galería y luego escojo la de la cámara si me la pone.

Alguien sabe a que se puede deber esta paranolla Uso la librería Camera 2.20 no se si habrá una mas reciente que vaya mejor.

Gracias
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Esto a veces ocurre con algunas fotos, la mayoria de veces por falta de memoria en el dispositivo, y aunque la foto la hagas con la cámara, el tamaño no siempre será el mismo, ya que los archivos jpg son comprimidos y la compresión depende de los datos redundantes de la foto, por eso los tamaños son diferentes.

En vez de cargar la foto en el bitmap asi como lo estas haciendo:
B4X:
IVfoto.Bitmap = LoadBitmap(Dir,FileName) ' con esto mostramos la foto en el listview

Cargalo asi:

B4X:
IVfoto.InitializeSample (Dir,FileName,10%x,10%y)

Empieza por ese valor del 10%, si se ve, subelo poco a poco hasta que deje de verse.

Otra cosa buena a hacer es una vez que no veas la imagen descargarla, asi desaloja memoria del dispositivo y no tendras estos problemas.

Cuando vayas a hacer este cambio, antes de ver la foto borra la memoria del dispositivo, asi tambien sabras si es un problema de memoria.

Saludos
 

JordiCP

Expert
Licensed User
Longtime User
No estoy seguro, pero tal como lo cuentas puede que no tenga nada que ver con la memoria, y sí con la manera en que Android trata los nombres de fichero y directorio de Android. Esto se puede ver mirando el tipo de mensaje de error que te da cuando no puede cargar la imagen.

Si es así,

Algunas veces, las rutas a archivos internos que trata Android no son "fisicas" sino "logicas" por lo que necesitan ser convertidas. Por ejemplo, el "path" logico a la galeria lo devuelve de manera diferente según versión de Android y si el dispositivo está conectado o en modo avión (no me preguntes por qué pero es así)

¿Puedes poner la rutina completa del evento donde asignas Dir y Filename? ¿Cuáles son los valores de estas variables en un caso en que sí/no te deje cargar la imagen?


(si no te da ningún error y sencillamente no muestra nada, prueba añadiendo IVfoto.Invalidate al final)
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Las veces que he tenido problemas iguales a TheFalcon fueron por problemas de memoria y con el
InitializeSample se solucionaron. Tambien pensé que podria ser un problema de nombres o directorios, y simplemente cree una carpeta 0 y la imagen la renombré a 1.jpg y le pasaba lo mismo, y los sintomas eran iguales (creo) por que tampoco me daba error al cargar, simplemente no se veia o se veia durante un momento y luego desaparecia. Y otras veces la cargaba sin mas. Cuando hice lo del InitializeSample se acabó el problema.

He leido de la galeria de imágenes y del gestor de sonidos que no te devuelven la dirección real en el dispositivo y nunca tuve problemas, por que si los hubiese tenido me hubiese dado un error de "fichero no encontrado" y creo que esto no es lo que dice TheFalcon, por eso le planteé un problema de memoria aunque tampoco le de un mensaje de error de memoria, pero los sintomas son los mismos que me habia ocurrido a mi.

(si no te da ningún error y sencillamente no muestra nada, prueba añadiendo IVfoto.Invalidate al final)

Si está empleando un Bitmap (el objeto, no la propiedad) esta propiedad no la tiene, la tiene un ImageView.

Saludos
 

JordiCP

Expert
Licensed User
Longtime User
Sí, de hecho puede ser por memoria (y casi siempre peta por ahí), pero con los datos actuales también cabe esta posibilidad, aunque como tu dices tendría que dar el mensaje de error. por eso digo que los logs pueden ayudar.

Si está empleando un Bitmap (el objeto, no la propiedad) esta propiedad no la tiene, la tiene un ImageView.
En su código, IVfoto es un Imageview u otro tipo de View, en caso contrario no podría utilizar
B4X:
IVfoto.Bitmap=LoadBitmap(...)
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

En su código, IVfoto es un Imageview u otro tipo de View, en caso contrario no podría utilizar

Si, tienes razón, ademas solo hay que leer al principio del post de el que pone:
Tengo un Imageview...
:rolleyes:

Bueno, ya dirá algo y saldremos de dudas, eso si, mañana me voy de vacaciones :D asi que si no lo hace mañana ya hasta la semana que viene

Saludos
 

TheFalcon

Active Member
Licensed User
Longtime User
A vuestros comentarios, No no me da ningún error simplemente no añade la imagen que selecciono pero no siempre, cuando escojo una imagen y no se añade, el ImageView se me queda en blanco total.
E intentado probar lo que me comentas de InitializeSample pero me dice "" Error description: Unknown member: initializesample "" no se si sera alguna librería que no estoy utilizando o alguna variable no declarada.

Si la imagen la capturo desde la cámara a veces también me hace lo mismo pero si le doy a atrás y vuelvo a entrar en el Activity me aparece la captura que hice en el imageview

Muchas gracias
 

JordiCP

Expert
Licensed User
Longtime User
Sólo por descartar, añade el invalidate después de hacer el Loadbitmap. Si no, hace pinta a lo que apuntaba Jesús.

B4X:
IVFoto.Bitmap=LoadBitmap(Dir,FileName)
IVfoto.invalidate     '<---- esto
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

E intentado probar lo que me comentas de InitializeSample pero me dice "" Error description: Unknown member: initializesample "" no se si sera alguna librería que no estoy utilizando o alguna variable no declarada.

Cuando te de un error de ese tipo (Unknown member:) , quiere decir que has puesto una propiedad que no existe en ese objeto, como es este caso. Un ImageView no tiene esta propiedad, la tiene un Bitmap, asi que tendrás que hacer esto:

B4X:
IVfoto.Bitmap = LoadBitmapSample(Dir,FileName,10%x,10%y)


No no me da ningún error simplemente no añade la imagen que selecciono pero no siempre, cuando escojo una imagen y no se añade, el ImageView se me queda en blanco

Está claro que es el mismo problema que me pasaba a mi, no da ningún tipo de error, la imagen no aparece y a veces si. Prueba lo de arriba, pero antes borra la memoria RAM (borrar los procesos inactivos y los que esten en segundo plano) y luego prueba de cargar esa imagen con ese tanto por ciento bajo, si se carga, ya veras que el problema era ese, y entonces empieza a subir ese valor hasta que veas bien la imagen en el dispositivo o te vuelva a ocurrir. Pero tambien seria interesante que una vez no utilizaras la imagen buscaras un metodo para descargarla.


Saludos
 
Last edited:

TheFalcon

Active Member
Licensed User
Longtime User
Solucionado.
Probé como me dijo Jordi.
B4X:
IVFoto.Bitmap=LoadBitmap(Dir,FileName)
IVfoto.invalidate     '<---- esto

pero así me seguía igual, pero con lo ultimo que has comentado Bgsoft
B4X:
IVfoto.Bitmap = LoadBitmapSample(Dir,FileName,10%x,10%y)

Me funciona a la perfección y no me falla. Muchísimas gracias a los 2. Esto va a los Apuntes para que no me vuelva a pasar :p.
Gracias
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Me alegro que lo consiguieras, es algo muy tipico de Android ese tipo de fallo, supongo que abras ido aumentando el % hasta que te volviera a pasar, aunque a veces no lo hace. Pero es interesante tambien que descargues la imagen cuando no la uses, asi si vuelves a entrar no se repetiria el problema, aunque con el tipo de carga ese no suele dar mas problemas.

Feliz Semana Santa

Saludos
 
Top