none
Como concatenar uma string de modo a acessar várias imagens sequenciais no Resources? RRS feed

  • Pergunta

  • Amigos, boa noite. Um amigo na internet comentou comigo que se arquivos de sons e imagens estiverem no resources do projeto, eles são compilados no executável, ficando inacessíveis. Num exemplo que vi com 3 imagens, o programador acessou elas ao longo do código da seginte forma:

    imagem = Properties.Resources.gato;

    Quando colocamos o ponto após o resouces, já surgem as opções dos arquivos que estão lá, mas minhas imagens são img1,  img2, im3. Atualmente eu uso um algoritmo pra escolher um número qualquer e concateno a string, exemplo:

    numImg = 3;

    imagemEscolhida = "img" + numImg + ".jpg";

    Mas no meu exemplo, o executavel depende totalmente de uma pasta. Usando o resources, não há mais necessidade, mas não consigo concatenar a string e usar com o resources. Tentei isso no exemplo, mas deu erro:

    string bicho = "gato";

    imagem = Properties.Resources + bicho; 

    Alguém pode me dar uma luz sobre isso?

    quinta-feira, 26 de maio de 2016 23:52

Respostas

  • Oi.

    Use o método ResourceManager.GetObject para obter o valor de um resource pelo seu nome.  A classe Resources auto-gerada do projeto tem um membro desse tipo.

    Image imagem = (Image) NamespaceDoProjeto.Properties.Resources.ResourceManager.GetObject("gato");

    • Marcado como Resposta Lemos1973 sábado, 28 de maio de 2016 16:52
    sexta-feira, 27 de maio de 2016 23:14

Todas as Respostas

  • Oi.

    Use o método ResourceManager.GetObject para obter o valor de um resource pelo seu nome.  A classe Resources auto-gerada do projeto tem um membro desse tipo.

    Image imagem = (Image) NamespaceDoProjeto.Properties.Resources.ResourceManager.GetObject("gato");

    • Marcado como Resposta Lemos1973 sábado, 28 de maio de 2016 16:52
    sexta-feira, 27 de maio de 2016 23:14
  • Obrigado, Vitor. Vou tentar aqui e te dou um retorno.

    Ps.: não consegui responder pelo celular. A caixa de texto fica com uma bolinha girando e não permite escrever nada...

    sábado, 28 de maio de 2016 14:59
  • Oi Vitor, testei aqui e funcionou perfeitamente! 

    numeroImagem = MeuAlgoritmoDeNumerosInteiros        

    try

                {
                    nomeDaImagem = "img" + numeroImagem;  //nome da imagem dentro do Resources
                    Image nomeDaImagemEscolhida = (Image)Singleton.Properties.Resources.ResourceManager.GetObject(nomeDaImagem);
                    pictureBox1.Image = nomeDaImagemEscolhida;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao Ler Imagem!" + ex.Message);
                }

    O executável foi compilado simples, com tudo dentro. Roda em qualquer lugar do PC. Muito obrigado!

    Agora eu tenho que ver como conseguir ler Textos .txt e sons .mp3... 

    sábado, 28 de maio de 2016 17:00
  • Consegui acessar bem os arquivos de imagem. Aproveitei a mesma dica e troquei Image por String e consegui acessar os textos, amanhã vou tentar acessar um som wave, mas eu queria usar sons mp3, pra diminuir o tamanho do arquivo final. Tive então a idéia de extrair os arquivos mp3 pra uma pasta e depois acessá-los, mas essa extração não é nada fácil. Fiz vários testes aqui e tá osso...

    O código de extração mais promissor que achei foi esse e mesmo assim deu erro:

                Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Singleton.Properties.Resources.ESPACO.wav");
                FileStream fileStream = new FileStream("Espaco.wav", FileMode.CreateNew);
                for(int i = 0; i < stream.Length; i++)
                {
                    fileStream.WriteByte((byte)stream.ReadByte());
                }
                fileStream.Close();

    segunda-feira, 30 de maio de 2016 01:19