https://foro.gambas-es.org/viewtopic.php?f=1&t=1638
-----------------------------------
ivanovichenco
Miercoles, 01 Junio 2011, 04:43

Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Hola a todos. tengo una carpeta con imágenes dentro de la carpeta del programa  , 1,png, 2.png, 3.png. etc. Necesito que al pulsar un boton, al azar se cargue una de las imagenes en el picturebox. Me pueden orientar un poco, pues estoy desorientado. No logro centrarme para sacarle punta a este problemita.
Perdonen la simpleza de la pregunta.:mrviolet: :sad:


-----------------------------------
Shell
Miercoles, 01 Junio 2011, 08:59

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Hola Ivan!.

Creo que te ayudara este ejemplo.

[code linenumbers=false syntax=gambas]

PUBLIC nombredeimagenes AS NEW String[] 

PUBLIC SUB Form_Open()
DIM fichero AS String

FOR EACH fichero IN Dir(User.Home & "/Imágenes/", "*.*")
  nombredeimagenes.Add(fichero)
NEXT 

END


PUBLIC FUNCTION imagenazar() AS Integer
DIM r AS Integer

r = Rnd(0, nombredeimagenes.Count)
RETURN r

END


PUBLIC SUB Button1_Click()
  Imagen.Picture = Picture[User.home & "/Imágenes/" & nombredeimagenes[imagenazar()]] 
END

[/code]

Si tienes una duda sobre el código, pregunta. ;-)


-----------------------------------
Ronny
Miercoles, 01 Junio 2011, 14:30

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Hola.

la verdad es simple, ya que dices que tus archivos tienen un número de nombre que imagino es correlativo. Si sabes la cantidad de archivos  "ficheros" que hay en tu carpeta contenedora. por ejemplo imagina que son 1000.

solo en una linea dentro de un botom escribes:


PUBLIC SUB Button1_Click()
  
[b][size=14]Imagen.Picture = Picture[User.home & "/contenedora/" & Rnd(0, 1000) & ".png"][/size][/b]


end
si quieres mayor estructura, declarar variables, modelar funciones y todo eso....  el ejemplo de nuestro  amigo Shell es ideal

y como tu mismo dijiste amigo Ivan.. perdona la simpleza de mi respuesta.


-----------------------------------
ivanovichenco
Miercoles, 01 Junio 2011, 15:25

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Gracias a los dos por las respuestas. 
Pongo manos a la obra.
 :mryellow:


-----------------------------------
soplo
Miercoles, 01 Junio 2011, 16:33

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Yo creo que la mejor solución es utilizar un DIR y obtener un string[] con todos los nombres de ficheros presentes en la carpeta.

El string[] tiene como valor mínimo 0 y como valor máximo el .MAX.

Para elegir un valor aleatorio basta con hacer un RND entre 0 y MAX. Supongamos que el valor obtenido es X. Pues la imagen a cargar es string[x]


-----------------------------------
ivanovichenco
Miercoles, 01 Junio 2011, 17:16

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Bueno, no me cargaron al azar
Aqui esta el archivo del código fuente por si alguien me hecha una manito.
Hice varios intentos y al final me parece de esta forma la mas sencilla que debiera funcionar pero no funciona.
Le cambie de lugar las comas de la ruta pero nada. por ningún lado funciona. he mirado ejemplos de gambas pero ninguno se asimila a lo que quiero. Me quedo grande este ejercicio. :sad: 

http://dl.dropbox.com/u/13566068/picture_azar.tar.gz


-----------------------------------
soplo
Miercoles, 01 Junio 2011, 18:06

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
[quote]PictureBox1.Picture = Picture["imagenes/Rnd(0, 4)&.png"][/quote]
Eso está mal. No puedes concatenar un string así. En todo caso "imagenes/" & Rnd(0,4) & ".png"

Y sigo diciendo que lo que yo dije es lo mejor porque puedes utilizar cualquier nombre y extensión.

Además a mi modesto entender te falta el user.home a esa dirección.

Un saludo

 :mryellow:


-----------------------------------
ivanovichenco
Miercoles, 01 Junio 2011, 18:38

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
PictureBox1.Picture = Picture["1.png"]
Soplo, pero me carga asi una imagen, sin user.home, por eso pienso que deberia cargar con ese codigo, pero no carga.


-----------------------------------
shordi
Miercoles, 01 Junio 2011, 19:39

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Prueba esto:

[code linenumbers=false syntax=gambas]PictureBox1.Picture = Picture.Load("imagenes/" & Int(Rnd(1, 4)) & ".png")[/code]

Suerte


-----------------------------------
Ronny
Miercoles, 01 Junio 2011, 20:08

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Bueno siguiendo con  el tema de los números aleatorios e imágenes, puedo decir que  cargar el grupo de directorio tal como lo establece nuestro amigo es una buena idea.   No soy nadie para decir si es la mejor o peor idea, creo que depende de ciertos elementos a tomar en cuenta como memoria, además de validaciones.  imagina que en la carpeta de imágenes, alguien  grabara un archivo   sin formato de imagen y aleatoriamente se tomara y picture intentara mostrarlo...     bueno muchos casos pueden pasar.... ademas  si uso png estoy estandarizando que se use un formato totalmente libre en la aplicación..  y pare de contar.    es un saco   de donde sacar cosas.......


Mi idea no es la mejor y no la presenté por serlo, sino por ser la mas corta y facil de entender tal como dijistte (Ivan)  al inicio....

yo estoy terminando una macro apliacion en la cual cada módulo carga aleatoriamente un personaje histórico y hace referencia a una imagen almacenada en disco en formato png tal como hiciste tu 1.png, 2.png..  y te digo que ese número proviene del id de la tabla....

te muestro  la interfaz gráfica.
 [img]http://foro.gambas-es.org/files/images/1358/muestra.png[/img] 



el código utilizado en la aplicación para la carga de la imagen  es sencillo:


PUBLIC SUB Form_Open()
'***************************************
DIM hres AS Result   'viene
DIM SQL AS String   ' viene
DIM salio, numreg AS Integer
DIM xarchivo AS String

'se inicializa la semilla para cargar el generador de números pseudoaleatorios
RANDOMIZE 

'cargan los registros la tabla personajes en la variable hres
hres = Main.hconn.Exec("select * from personajes")

'cuenta el numero de registros de la tabla
numreg = hres.Count 
'genera un numero pseudoaleatorio en el intervalo entre 1 y el numero de registros
salio = Int(Rnd(1, numreg))
'mueve el puntero hasta el numero pseudoaleatorio 
hres.MoveTo(salio - 1)
'carga la informacion el el textLabel correspondiente
xpersonaje.Text = hres["personaje"]
xdescripcion.Text = hres["descripcion_personaje"]
'concateno el string que voy a pasar al picturebox
xarchivo = "personajes/" & salio & ".png"
'label2.Text = xarchivo
PictureBox1.Picture = Picture[xarchivo]


OBSERVA ES LO MISMO QUE TE ENVIE PERO CON UNA BDD.
y que User.home no es necesario ya que la ruta se toma como relativa desde gambas.

Alguien me preguntó un día quie que pasaba si me eliminaban las imágenes de la carpeta PERSONAJES.  y lo que hice al inicio fue un cheksum  lo que  valida que las imágenes solo se pueden eliminar desde la aplicacion. si alguien elimina alguna manualmente, un servicio de la aplicacion lo dtecta como faltante y la restaura desde una carpeta de respaldo comprimida y oculta contra una BDD.

Te confiezo que no he podido ver el código que escribiste ya que el enlace me dio problemas.   a por cierto no olvides el RANDOMIZE
Por último, esta imagn de la aplicacion que te envíe tiene cortes (editada) debido a que no se ha liberado e involucra losgos de entes gubernamentales..


PD. Recuerda que ahorita con estas herramientas es facil generar nnúmeos aleatorios... cuando utilizaba un lenguaje que no lo permitía debia recurrir a ensamblador...     y ahi si es complicado.   te dejo la rutina pra aque la guardes en tu repositorio de código

random:
	db 0b8h	; mov ax,seed1
seed1:	db 0,0

	dec ax	; decrement
	
randloop:
	db 35h	; xor ax,seed2
seed2:	db 0,0
	inc ax	;
	xchg ah,al
	xor [seed2],ax	; 0.092
	sub ax,[seed1]
	rol al,1	; 0.091
	xchg ah,al	; 0.092
	sub [seed1],ax	; change seed1
	ret
por supuesto, aqui dejas a punto los registros y entonces aplicas un método matemático predictivo como la ecuación de punto de silla de Rosenbrock u otro conocido.


-----------------------------------
ivanovichenco
Miercoles, 01 Junio 2011, 20:59

Re: Como Cargar Una Imagen Al Azar En Un Picturebox
-----------------------------------
Gracias a todos por la manito que me dieron. De todos aprendí un poco.
Shordi, diste en el clavo. Así de sencillo  era que quería el código sin complicarme con mas cosas, que intuia eran innecesarios o redundantes.
Ronny, también estoy en plan de construir una aplicación pedagógica, solo que se me ha retrasado porque los enfoques que le he dado se me complican y debo comenzar desde cero. Buscando sobre como programar mejor, por un hilo de Fabián y la pagina web de Fabián me llevo a conocer  la xprogramacion y la iterativa, y ahora comienzo con nuevos ánimos :lol:  para ver si en unos pocos meses tengo algo util que pueda mostrar.
Dispongo de poco tiempo libre y me toca a paso de tortuga.
Suerte para todos.


