https://foro.gambas-es.org/viewtopic.php?f=1&t=1638&p=9552#p9552
-----------------------------------
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.


