Usuário com melhor resposta
Carregar imagens aleatórias sem repetição ao pressionar botão

Pergunta
-
Boa tarde,
Preciso de uma ajuda em um código,onde irei criar um formulário com 2 picturebox, ao pressionar o botão essas picture box irão carregar duas imagens e se for novamente pressionado irá carregar mais outras duas assim por diante. Uma observação importante é que essas imagens não podem se repetir. Um exemplo bom para ilustrar seria uma especie de baralho como se cada vez que for pressionado o botão uma carta seria revelada até que não tenha mais nenhuma a ser carregada. Desde já agradeço! Saúde e paz a todos.
Respostas
-
Frankson, é simples o problema.
Como você não tem código nenhum vamos só na teoria.
As imagens estão em uma pasta e são arquivos que serão carregados no PictureBox. Como carregar um arquivo no PictureBox eu não vou descrever aqui porque é simplesmente associar o arquivo a propriedade "Image" (ou "Picture" - não lembro).
O que você vai fazer é criar um array de string (ou um "Dictionary", classe do namespace "System.Collections.Generic") e colocar lá toda imagem que você carregar (o caminho ou nome da imagem). Assim sendo, quando você carregar uma imagem deve remover da lista de imagens da pasta e lançar na lista de imagens que já foram carregadas.
Quando você "Randomizar", irá fazê-lo apenas nas imagens da lista ainda não carregada.
Então - liste as imagens da pasta no Array1, randomize uma posição qualquer no array para carregar, remova essa entrada do Array1. Mais simples ainda...
- Marcado como Resposta Marcos SJ terça-feira, 26 de janeiro de 2016 10:54
-
Boa tarde, Fulvio C ficou muito bom o seu exemplo. Parabéns e muito obrigado pela sua ajuda!! Vai ser muito útil...
- Editado FranksonFernandes terça-feira, 26 de janeiro de 2016 16:24
- Marcado como Resposta FranksonFernandes terça-feira, 26 de janeiro de 2016 17:27
Todas as Respostas
-
Boa tarde,
Preciso de uma ajuda em um código,onde irei criar um formulário com 2 picturebox, ao pressionar o botão essas picture box irão carregar duas imagens e se for novamente pressionado irá carregar mais outras duas assim por diante. Uma observação importante é que essas imagens não podem se repetir. Um exemplo bom para ilustrar seria uma especie de baralho como se cada vez que for pressionado o botão uma carta seria revelada até que não tenha mais nenhuma a ser carregada. Desde já agradeço! Saúde e paz a todos.
Tem algum código já iniciado?
Qual é a sua verdadeira duvida?
Quantas imagens terão nesse codigo?
Da onde as imagens serão buscadas ou trazidas?
Um hora algum ou as duas poderam se repetir?
Terá então finalizador por não poderem se repetir?
Espero que auxilie nesse aspecto!!!
Saúde e paz a você também amigo!
Paz do Senhor!
Fulvio C
-
Frankson, é simples o problema.
Como você não tem código nenhum vamos só na teoria.
As imagens estão em uma pasta e são arquivos que serão carregados no PictureBox. Como carregar um arquivo no PictureBox eu não vou descrever aqui porque é simplesmente associar o arquivo a propriedade "Image" (ou "Picture" - não lembro).
O que você vai fazer é criar um array de string (ou um "Dictionary", classe do namespace "System.Collections.Generic") e colocar lá toda imagem que você carregar (o caminho ou nome da imagem). Assim sendo, quando você carregar uma imagem deve remover da lista de imagens da pasta e lançar na lista de imagens que já foram carregadas.
Quando você "Randomizar", irá fazê-lo apenas nas imagens da lista ainda não carregada.
Então - liste as imagens da pasta no Array1, randomize uma posição qualquer no array para carregar, remova essa entrada do Array1. Mais simples ainda...
- Marcado como Resposta Marcos SJ terça-feira, 26 de janeiro de 2016 10:54
-
-
Tem algum código já iniciado?
Não apenas havia criado um pequeno form com a labels e botões.
Qual é a sua verdadeira duvida?
Seria a relação entre randomizar,carregar automaticamente as imagens no picture box, randomizando as e não poderia ter repetição. Minha dúvida seria mais ou menos qual estrutura do C# a ser implementada e como relaciona-las, por exemplo se eu fosse usar um array ou um Dicionary como iria relacionalos ao picturebox.
Quantas imagens terão nesse codigo?
Até então não esta definido, mas terão em media de 50 imagens.
Da onde as imagens serão buscadas ou trazidas?
A principio pensei em trazer da pasta do próprio sistema.
Um hora algum ou as duas poderam se repetir?
Nunca devem se repetir. A não ser que o sistema seja reiniciado.
Terá então finalizador por não poderem se repetir?
A função de trazer a próxima imagem sim.
Obrigado pela ajuda!
-
Tudo bem?
Bem vindo ao fórum e obrigado por sua participação.
É necessário que você crie o seu código e a comunidade irá ajudá-lo quando houver algum erro/problema com o código. O fórum não presta suporte a "How to". O fórum não é focado em compartilhamento de código como alguns outros fóruns de desenvolvimento. A intenção é prestar algum suporte conforme informado acima e não necessáriamente o auxílio na criação de código.
Atenciosamente
Marcos SJ
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
- Editado Marcos SJ terça-feira, 26 de janeiro de 2016 12:40
-
-
Protótipo:
Código:
using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; namespace WAppImagem { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private IList<string> _imagens; private IList<string> _exibidas; private Random _random; private void BtnCarregar_Click(object sender, EventArgs e) { ViewImagens(); } private void Form1_Load(object sender, EventArgs e) { _imagens = System.IO.Directory.EnumerateFiles(@"c:\Temp\1", "*.*", System.IO.SearchOption.AllDirectories) .Where(s => s.ToLower().EndsWith(".png") || s.ToLower().EndsWith(".jpg") || s.ToLower().EndsWith(".jpeg") || s.ToLower().EndsWith(".gif")).ToList(); _exibidas = new List<string>(); _random = new Random(); BtnReinicia.Enabled = false; BtnCarregar.Enabled = true; ViewImagens(); } private void ViewImagens() { PictureBox1.Image = null; PictureBox2.Image = null; int numero = -1; if (_imagens.Count > 0) { for (int i = 0; i < 2; i++) { do { numero = _random.Next(0, _imagens.Count); } while (_exibidas.Any(x => x.Equals(_imagens[numero]))); string nameImagem = _imagens[numero]; if (i == 0) { PictureBox1.Load(nameImagem); } else if (i == 1) { PictureBox2.Load(nameImagem); } _exibidas.Add(nameImagem); _imagens.Remove(nameImagem); if (_imagens.Count == 0) { BtnReinicia.Enabled = true; BtnCarregar.Enabled = false; MessageBox.Show("Não possui mais itens para randonizar"); break; } } } } private void BtnReinicia_Click(object sender, EventArgs e) { _imagens.Clear(); _exibidas.ToList().ForEach(x => { _imagens.Add(x); }); _exibidas.Clear(); BtnReinicia.Enabled = false; BtnCarregar.Enabled = true; ViewImagens(); } } }
A imagens (o seu o Form) e esse código fazem o que você precisa. Como funciona:
Ele lê um diretório, pega todas as imagens de extensão (gif, jpg, jpeg e png) monta um array e já mostra de cara duas imagens.
Após ir clicando no botão ele troca as informações de um array para o outro até o acabar as imagens a serem randonizadas. Quando acabar mostra um mensagem e depois habilita o botão Reinicializar para que comece tudo de novo.
O código aproximado de sua dúvida está ai, você deve estudar e tentar entender!
Espero que ajude!
Fulvio C
- Sugerido como Resposta Fulvio Cezar Canducci Dias terça-feira, 26 de janeiro de 2016 14:23
-
Boa tarde, Fulvio C ficou muito bom o seu exemplo. Parabéns e muito obrigado pela sua ajuda!! Vai ser muito útil...
- Editado FranksonFernandes terça-feira, 26 de janeiro de 2016 16:24
- Marcado como Resposta FranksonFernandes terça-feira, 26 de janeiro de 2016 17:27