Usuário com melhor resposta
Como concatenar uma string de modo a acessar várias imagens sequenciais no Resources?

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?
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
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
-
-
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...
-
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();