2010-01-22 9 views
5

Tengo 30 PNG en un archivo de recursos y me gustaría iterar alrededor de ellos dentro de un temporizador. Este temporizador establece la imagen de fondo del formulario al siguiente PNG en la secuencia para producir una animación básica.¿Cómo acceder programáticamente a las imágenes en un archivo de recursos?

No encuentro una manera fácil de enumerar el archivo de recursos y obtener las imágenes reales. También estoy interesado en mantener las referencias a las imágenes no corregidas en sus nombres de archivo para que la actualización de la nomenclatura de las imágenes dentro del archivo de recursos no requiera que actualice esta sección del código.

Notas:

  • Las imágenes dentro del archivo de recursos se nombran en secuencia ('image001.png', 'image002.png', ...).
  • Este archivo de recursos se usa exclusivamente para almacenar estas imágenes.
+0

mira mi respuesta actualizada – Fredou

+0

¡Tu respuesta actualizada es lo que estaba buscando gracias! – InvertedAcceleration

+0

Revise este blog: [Social MSDN] (http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5a38e44d-bb43-4434-b8d5-4246cdc7a97d) – rfonn

Respuesta

2
private void Form1_Load(object sender, EventArgs e) 
    { 
     var list = WindowsFormsApplication1.Properties.Resources.ResourceManager.GetResourceSet(new System.Globalization.CultureInfo("en-us"), true, true); 
     foreach (System.Collections.DictionaryEntry img in list) 
     { 
      System.Diagnostics.Debug.WriteLine(img.Key); 
      //use img.Value to get the bitmap 
     } 

    } 
+0

Entiendo este uso de los archivos de recursos. Mi pregunta es cómo extendería este tipo de uso para decir 'dada la imagen actual, pasar a la siguiente imagen'? ¿Podría proporcionar un ejemplo de código? – InvertedAcceleration

1
Assembly asm = Assembly.GetExecutingAssembly(); 
for(int i = 1; i <= 30; i++) 
{ 
    Stream file = asm.GetManifestResourceStream("NameSpace.Resources.Image"+i.ToString("000")+".png"); 
    // Do something or store the stream 
} 

para obtener el nombre de todos los recursos incrustados:

string[] resourceNames = Assembly.GetManifestResourceNames(); 
foreach(string resourceName in resourceNames) 
{ 
    System.Console.WriteLine(resourceName); 
} 

Además, echa un vistazo a la example en la función Form1_Load.

+0

El único problema con este método (que funcionará) sería que si cambio el nombre de las imágenes (es probable que suceda en este proyecto) tengo que volver y actualizar el código. ¿Sientes que eso es inevitable? – InvertedAcceleration

+0

Puede obtener la lista de recursos incrustados, pero si busca archivos específicos, no veo una forma de evitar esto. Si sabe que los ÚNICOS archivos en los recursos son sus imágenes, puede usar GetManifestResourceNames() – SwDevMan81

+0

Gracias, una combinación de GetManifestResourceNames y GetManifestResourceStream me acercará mucho a la solución final. – InvertedAcceleration

1

Aquí hay un buen tutorial sobre cómo extraer los recursos incrustados here en CodeProject, y aquí está how para usar una imagen como mezcla alfa y muestra cómo cargarla en una lista de imágenes. Aquí hay una clase de ayuda para facilitar la carga de recursos incrustados here.

Espero que esto ayude, Saludos cordiales, Tom.

Cuestiones relacionadas